首页 > 解决方案 > 如何在 node.js 中使用 es6 模块

问题描述

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

import express from "express";
SyntaxError: Unexpected identifier

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

“类型”:“模块”

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

...
"description": "Shopping list to learn the MERN stack",
  "type": "module",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "server": "nodemon server.js"
  },
...

但我仍然遇到同样的问题。我更喜欢使用 import ES6 语法而不是这种语法。

const express = require('express')

标签: node.jsexpressecmascript-6

解决方案


解决方案:

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

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

就那么简单。


节点方式:

(根据ECMAScript 模块文档

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

新的 ES6 支持将处理任何一个.mjs或扩展文件中的代码。.js重命名我觉得很不方便。

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

NodeJS 提供的带有--experimental-modules标志的解决方案在所有情况下都不适用于我。‍♂️</p>

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


题外话:

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

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

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


参考:


推荐阅读