最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Node.js v11.9.0上的ECMAScript模块

运维笔记admin14浏览0评论

Node.js v11.9.0上的ECMAScript模块

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扩展名(你可以混合搭配)。

发布评论

评论列表(0)

  1. 暂无评论