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

时间:2019-09-14 02:25:35

标签: node.js express ecmascript-6

我正在尝试使用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"
  },
...

但是我仍然遇到同样的问题。我宁愿使用导入ES6语法而不是此语法。

const express = require('express')

6 个答案:

答案 0 :(得分:4)

解决方案:

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

  • tqdm
  • 确保脚本由complete/total的{​​{1}}选项运行。

就这么简单。


节点方式:

(根据ECMAScript Modules Documentation

除了npm install esm属性中的node以外,NodeJS要求脚本通过-r esm运行。

添加到"type": "module"package.json扩展文件中的代码将受新ES6支持的影响。重命名我觉得很不方便。

注意: node --experimental-modules <your_script.js>对于支持.mjs文件特别重要。阅读链接的文档。

由NodeJS提供的带有.js标志的解决方案并非在所有情况下都对我有用。 ?‍♂️

添加"type": "module"软件包更易于维护;和可靠。一旦ESM支持不再具有实验性,就可以轻松/迅速地删除它。


主题提示:

如果您想在ES6上运行测试 .js,建议使用像Mocha这样的可靠/灵活的框架。

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

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


参考文献:

答案 1 :(得分:2)

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

SyntaxError: Cannot use import statement outside a module

让我们解决这个问题

安装三个主要包

npm install --save-dev @babel/core @babel/preset-env @babel/node
npm install --save-dev nodemon

添加 .babelrc 文件

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

这在package.json

"start": "nodemon --exec babel-node app.js"

答案 2 :(得分:1)

我创建了一个支持 es6 模块的 nodejs 样板。

https://github.com/jasonjin220/es6-express-rest-api-boilerplate

答案 3 :(得分:-1)

您需要Babel Transpiler来执行此操作,因为Node.js不支持es6。

首先将这些软件包添加到您的项目中:

npm install --save-dev babel-cli babel-preset-es2015 rimraf

然后,创建一个.babelrc文件,Babel转译器使用该文件在转译过程中了解一些信息。 touch .babelrc 然后,将此行添加到.babelrc中:

{
  "presets": ["es2015"]
}

这告诉您的Babel使用2015年标准的es6预设。

然后,修改package.json并告诉它使用transpiler。

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "rimraf dist/ && babel ./ --out-dir dist/ --ignore ./node_modules,./.babelrc,./package.json,./npm-debug.log --copy-files",
"start": "npm run build && node dist/index.js"
 },

您必须在脚本部分添加以下内容,该行告诉您何时运行npm run start,编译器将首先将es6语法转换为最小的JavaScript语法,然后再使用。

检查依赖项:

"dependencies": {
"express": "^4.15.2",
"morgan": "^1.8.1",
"rimraf": "^2.6.1"
 }

与Dev的依赖关系:

"devDependencies": {
"babel-cli": "^6.24.0",
"babel-preset-es2015": "^6.24.0"
}

这应该有效,如果有任何问题,请发表评论。

答案 4 :(得分:-1)

您需要使用Babel,

npm install --save-dev @babel/plugin-proposal-class-properties

然后使用,如果没有,请创建一个.babelrc文件,并带有以下选项:

{"plugins": ["@babel/plugin-proposal-class-properties"]}

然后在package.json中添加广告devDependencies

"@babel/plugin-proposal-class-properties": "^7.5.5",

应该完成的工作。

答案 5 :(得分:-1)

好吧,因此,在对ES6方式进行了更多研究之后,这对我有用。这是上面和下面的答案的组合:

package.json

node --experimental-modules server.mjs

server.mjs

import dotenv from 'dotenv'
dotenv.config()

const db = process.env.MONGO_URI