我试图在Node.js应用程序上使用导出和导入,因此我使用了Node.js文档ECMAScript Modules。但是我出错了
我正在使用
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)
答案 0 :(得分:2)
如doc所述,您的文件需要扩展名.mjs
:
--experimental-modules标志可用于启用以下功能: 加载ESM模块。
设置好之后,以.mjs结尾的文件将可以 作为ES模块加载。
您当前必须使用该标志,并且除了使用像babel这样的编译器之外,目前没有其他“无缝”方式使用它们。
正如昆汀所说,CommonJS文件仍然可以使用.js扩展名(您可以混合和匹配)。