javascript - 如何在 Deno 程序中使用 IIFE 脚本?
问题描述
我们有一个当前必须以 ES3 为目标的 JS 库,因为生产产品使用带有旧 JS 引擎的工具,这是不可协商的。但是我需要能够在 Deno 中使用这个库,而且我不能将它转换为 ES 模块。该库目前正在使用函数闭包模块,ala Crockford,其中每个源都是一个构造函数,如下所示:
function ModuleName() {
"use strict";
...
}
然后该模块与let mod=new ModuleName();
.
有什么办法可以在 deno 中使用这些?我不在乎如何,确切地说——eval
如果需要,我可以加载脚本和它,但最好只使用某种形式的导入。
我已经尝试以各种形式加载脚本文件并使用eval
和使用Function
,以及import
记录的每个变体。我搜索了 Deno 文档并尝试了所有我能想到的搜索。一切都无济于事。
任何建议,将不胜感激。
解决方案
关键是包装源文件Function(return (+ ... +);)()
以获取对模块构造函数的引用,然后可以构造该函数。我对更好的想法持开放态度,但这适用于我的情况。
function createModule(pthORurl, ...args) {
try {
let mod = Function("return ("+Deno.readTextFileSync(pthORurl)+");")();
if(typeof(mod)!=="function") { throw Error("Loaded module is type '"+typeof(mod)+"' not type 'function'"); }
mod = new mod(...args);
if(typeof(mod)!=="object") { throw Error("Loaded module is type '"+typeof(mod)+"' not type 'object'"); }
return mod;
}
catch(err) { err.message += " (loading "+pthORurl+")"; throw err; }
}
推荐阅读
- git - 在非主分支中添加文件(仅)但不在主分支中
- android - 范围错误索引无效值不在范围内,0..1 包括 2 在飞镖颤振应用程序中
- neo4j - 在 Neo4j 中获取与节点的特定关系的计数
- mongodb - 在 mongo 脚本中的地图内添加条件
- protractor - 量角器未使用 Cucumber Reporter 捕获屏幕截图
- apache - 如何将嵌套的 json 数据加载到德鲁伊的单列中
- swiftui - 使用 SwiftUI List()、ForEach()、.onTapGesture WatchOS6 传递值的问题
- javascript - Angular 8 --base-href 自升级后无法正常工作
- c - ELF _DYNAMIC 符号表的条目数是多少?
- flutter - Flutter v1.12.13+hotfix.5 FocusNode 意外行为