Node.js v11.9.0上的ECMAScript模块
我正在尝试在Node.js应用程序上使用导出和导入,所以我使用了Node.js文档ECMAScript Modules。但我收到了错误
我在用,
- v11.9.0
- 运行命令
node --experimental-modules app.js
如何在Node.JS中使用ES6导出和导入?我不喜欢不使用任何额外包装的方式!
代码:
// test.js
module.exports = { one: 1 };
// app.js
import foo from './test.js';
console.log(foo);
错误:
(node:9352) ExperimentalWarning: The ESM module loader is experimental.
/home/Workspace/test/app.js:1
(function (exports, require, module, __filename, __dirname) { import foo from './test.js';
^^^
SyntaxError: Unexpected identifier
at new Script (vm.js:84:7)
at createScript (vm.js:264:10)
at Proxy.runInThisContext (vm.js:312:10)
at Module._compile (internal/modules/cjs/loader.js:694:28)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:745:10)
at Module.load (internal/modules/cjs/loader.js:626:32)
at tryModuleLoad (internal/modules/cjs/loader.js:566:12)
at Function.Module._load (internal/modules/cjs/loader.js:558:3)
at createDynamicModule (internal/modules/esm/translators.js:73:15)
at Object.meta.done (internal/modules/esm/create_dynamic_module.js:40:9)
回答如下:
正如doc所说,你的文件需要.mjs
扩展:
--experimental-modules标志可用于启用加载ESM模块的功能。
设置完成后,以.mjs结尾的文件将能够作为ES模块加载。
您当前必须使用该标志,除了使用像babel这样的转换器之外,目前还没有“无缝”的方式来使用它们。
正如Quentin所说,CommonJS文件仍然可以使用.js扩展名(你可以混合搭配)。