如何在 node.js 中使用 es6 模块

pin*_*yeg 3 node.js express ecmascript-6

我正在尝试使用 ES6 语法将 express 导入我的项目,但它一直给我错误:

import express from "express";
SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,发现人们说要添加的地方:

“类型”:“模块”

到我已经完成的 package.json 文件:

...
"description": "Shopping list to learn the MERN stack",
  "type": "module",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "server": "nodemon server.js"
  },
...
Run Code Online (Sandbox Code Playgroud)

But I'm still getting the same issue. I would prefer to use the import ES6 syntax rather than this syntax.

const express = require('express')
Run Code Online (Sandbox Code Playgroud)

Kam*_*her 11

解决方案:

对我来说,最好、最简单、最兼容的解决方法(日期为20199 月)是:

  • npm install esm
  • 确保node使用该-r esm选项运行脚本。

就那么简单。


节点方式:

(根据ECMAScript 模块文档

除了NodeJS 中的"type": "module"属性之外package.json,脚本还需要通过node --experimental-modules <your_script.js>.

代码.mjs.js扩展文件中的代码将得到对新 ES6 的支持。重命名我觉得很不方便。

注意: "type": "module"对于支持.js文件尤其重要。阅读链接的文档。

NodeJS 提供的带有--experimental-modules标志的解决方案在所有情况下都不适用于我。???

添加esm包更易于维护;和可靠。一旦 ESM 支持不再是实验性的,就可以轻松/快速地删除。


题外话提示:

如果你想对你的 ES6 import/export代码运行测试,我建议依赖一个可靠/灵活的框架,比如 Mocha。

您可以按照此说明运行支持 ES6 的 Mocha 测试

尝试使用Jest我无法成功运行测试。显然他们不想直接支持实验性 ES6 并建议转译代码(我讨厌的东西)。


参考:


Vah*_*yan 5

如果你尝试使用ES6 语法运行Node js应用程序,你会遇到这种错误

SyntaxError: Cannot use import statement outside a module
Run Code Online (Sandbox Code Playgroud)

让我们解决这个问题

安装三个主要包

npm install --save-dev @babel/core @babel/preset-env @babel/node
npm install --save-dev nodemon
Run Code Online (Sandbox Code Playgroud)

用这个添加.babelrc文件

{ "presets": ["@babel/preset-env"] }

这在package.json

"start": "nodemon --exec babel-node app.js"
Run Code Online (Sandbox Code Playgroud)