我试图使用QickJS和NectarJS运行一些NodeJS代码,但我遇到了一个老问题,如何导入模块。
特别是,qjs -m <source-js>
加载ES6模块,并期望import
export
语句,而不是require,并编写module.exports
或exports
。
我还使用了一个内置的std
模块(无法通过node_module解析(。
对于第一个示例,我手动更改了代码,但我希望有一个脚本来进行转换。我本以为这在webpack上是可行的,但我不知道怎么做。
示例
main.js
const h = require('./hello.js');
h.sayHello();
hello.js
const h = require('./print.js');
function sayHello(){
h.print("Hello");
}
module.exports = {sayHello};
print.js
module.exports = {
print(s) {
console.log(s);
}
}
我可以使用命令node main.js
运行此操作,但qjs -m main.js
将失败,因为未定义"要求">
QuickJS不支持CommonJS模块。相反,它支持遵循ECMA标准的本地JS模块。所以你要么
- 从CommonJS转换到std模块,然后使用
import/export
而不是require
。正如你提到的webpack,那会很好。ESBuild也可以从CommonJS(.cjs(转换到ES模块(.mjs(。或者 - 您可以尝试QuickJS的require加载程序,我在这里找到了它https://github.com/IvanGaravito/quickjs-require.
尊敬的Andreas