Node.js v11.9.0上的ECMAScript模块

时间:2019-02-14 11:39:15

标签: node.js

我试图在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)

1 个答案:

答案 0 :(得分:2)

doc所述,您的文件需要扩展名.mjs

  

--experimental-modules标志可用于启用以下功能:   加载ESM模块。

     

设置好之后,以.mjs结尾的文件将可以   作为ES模块加载。

您当前必须使用该标志,并且除了使用像babel这样的编译器之外,目前没有其他“无缝”方式使用它们。

正如昆汀所说,CommonJS文件仍然可以使用.js扩展名(您可以混合和匹配)。