动态导入()-当代码被打包到可执行文件中时失败



我在commonjs环境中工作,试图动态导入es模块

考虑以下代码:

const mysqlController = (async function () {
try{
var {default:dateformat}= await import('dateformat');
// also tried await import('../../../node_modules/dateformat/lib/dateformat.mjs')
}
catch(e){
console.error('Line 31 of db_controller');
console.error(e);
}
// More stuff
})()

语句await import('dateformat');在调试时运行良好。但是,当使用pkg生成独立的可执行文件时,会出现以下错误:

TypeError: Invalid host defined options

有人能告诉我这里发生了什么事吗?

好吧,由于某些原因,使用软件包pkg制作的节点可执行文件不支持import()语句。

作为一个临时的解决方法,我为es模块制作了cjs替代品,我正试图使用汇总导入这些模块。然后,我在本地复制了bundle,并用require对其进行了复制。

Vercel/pkg不支持导入ES6模块。

原因似乎是pkg必须遍历程序中的所有require()-调用,才能知道到底需要将什么打包到它创建的exe中。它不知道它也应该对程序中的所有和任何导入语句执行类似的操作。

请参阅:https://github.com/vercel/pkg/pull/1323

最新更新