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

import express from "express";
SyntaxError: Unexpected identifier

我做了一些研究,发现人们在说什么要补充:

“type”:“模块”

到我的package.json文件中,该文件已完成:
...
"description": "Shopping list to learn the MERN stack",
  "type": "module",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "server": "nodemon server.js"
  },
...

但是我仍然遇到同样的问题。我宁愿使用导入ES6语法而不是此语法。
const express = require('express')

最佳答案

解决方案:

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

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

  • 就那么简单。

    Node 方式:

    (根据ECMAScript Modules Documentation)

    除了"type": "module"package.json属性之外,NodeJS要求脚本通过node --experimental-modules <your_script.js>运行。

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

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

    NodeJS提供的带有--experimental-modules标志的解决方案在所有情况下都不适合。 ♂‍♂️

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

    题外话:

    如果要在ES6 import/export代码上运行测试,建议使用像Mocha这样的可靠/灵活的框架。

    您可以关注this instructions to run Mocha tests supporting ES6

    尝试开玩笑,我无法成功运行测试。显然,他们不想直接支持实验性ES6并建议移植代码(我讨厌)。

    引用:
  • https://alxgbsn.co.uk/2019/02/22/testing-native-es-modules-mocha-esm/
  • https://timonweb.com/tutorials/how-to-enable-ecmascript-6-imports-in-nodejs/
  • https://nodejs.org/api/esm.html#esm_ecmascript_modules
  • 10-07 22:01