如何在 Deno 程序中使用 IIFE 脚本?
How can I use an IIFE script in a Deno program?
我们有一个 JS 库,目前必须以 ES3 为目标,因为生产产品使用带有旧 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; }
}
我们有一个 JS 库,目前必须以 ES3 为目标,因为生产产品使用带有旧 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; }
}