SyntaxError:意外的令牌导入 - Express

kyo*_*kyo 4 node.js express ecmascript-6

我在index.js中有这个

import express from 'express'
import data from './data/data'


const app = express();
const PORT = 3000; 

app.listen(PORT, () =>
    console.log(`Your server is running on ${PORT}`)
);
Run Code Online (Sandbox Code Playgroud)

这是我的package.json

{
    "name": "express-app",
    "version": "1.0.0",
    "description": "backend provisioning",
    "main": "app.js",
    "scripts": {
        "start": "nodemon ./index.js --exec babel-node -e js"
    },
    "author": "B",
    "license": "ISC",
    "devDependencies": {
        "babel-cli": "^6.26.0",
        "babel-preset-env": "^1.6.1",
        "babel-preset-stage-0": "^6.24.1"
    },
    "dependencies": {
        "express": "^4.16.3"
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行nodemon时,我得到了

[nodemon] 1.17.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
/Users/b/Desktop/express-app/index.js:1
(function (exports, require, module, __filename, __dirname) { import express from 'express'
                                                            ^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:607:28)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
[nodemon] app crashed - waiting for file changes before starting...
Run Code Online (Sandbox Code Playgroud)

我忘了做任何事情都可以使用导入命令吗?

我这样做了:

npm install --save-dev babel-cli babel-preset-env babel-preset-stage-0
npm install express
nodemon
Run Code Online (Sandbox Code Playgroud)

同样的结果

我也试试这个

rm -rf node_modules/
npm install
nodemon
Run Code Online (Sandbox Code Playgroud)

同样的结果


.babelrc

{
    "presets":[
        "env",
        "stage-0"
    ]
}
Run Code Online (Sandbox Code Playgroud)

Vas*_*san 5

NodeJS import仅在实验上支持本地,并且仅当您的脚本具有.mjs扩展名时才支持.

这就是为什么start你的package.json指的是babel-node,它在运行之前将ES6代码转换成经典的JS.但我怀疑这个命令是否会起作用,因为你没有将任何预设传递给babel来运行脚本.试试这个命令:

nodemon --exec babel-node --presets env index.js

[要么]

将文件重命名为.mjs扩展名,然后运行:

nodemon --experimental-modules index.mjs