我正在尝试使用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')
答案 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