У меня это есть в моем index.js
import express from 'express'
import data from './data/data'
const app = express();
const PORT = 3000;
app.listen(PORT, () =>
console.info(`Your server is running on ${PORT}`)
);
Это мой 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"
}
}
Когда я запустил 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...
Я забыл что-нибудь сделать, чтобы использовать команду импорта?
Я сделал это :
npm install --save-dev babel-cli babel-preset-env babel-preset-stage-0
npm install express
nodemon
тот же результат
Я тоже пробую это
rm -rf node_modules/
npm install
nodemon
тот же результат
.babelrc
{
"presets":[
"env",
"stage-0"
]
}
Вам нужно запустить npm start, а не nodemon. Обратите внимание, что вы передаете дополнительные параметры в nodemon в своем сценарии start.
На днях я столкнулся с той же проблемой. Я попытался использовать импорт на своем экспресс-сервере и запустил nodemon для просмотра файла, хотя я установил все необходимые зависимости, core, env, stage-0 и т.д ... nodemon не поддерживает импорт ??
@Iso, ты прав !!





NodeJS изначально поддерживает import только экспериментально, и только если ваш скрипт имеет расширение .mjs.
Вот почему start в вашем package.json ссылается на вавилонский узел, который переводит код ES6 в классический JS на лету перед его запуском. Но я сомневаюсь, что даже эта команда будет работать, потому что вы не передаете какие-либо предустановки в babel для запуска скрипта. Попробуйте эту команду:
nodemon --exec babel-node --presets env index.js
[ИЛИ ЖЕ]
Переименуйте файл, чтобы он имел расширение .mjs, а затем запустите следующее:
nodemon --experimental-modules index.mjs
Я попробовал ваш первый вариант, при запуске nodemon получил тот же результат.
Моя версия узла - v8.9.4
@ihue Я только что попробовал ваш точный сценарий на 8.9.4 в своем ящике, и у меня он работает. Вы уверены, что выполнили мою команду точно так, как указано? И вы получаете точно такую же ошибку, как и в вашем вопросе?
Я полагаю делать npm start, а не nodemon
@ihue Хорошо, значит, вы изменили свой package.json, чтобы использовать мою команду?
@ihue Я исправил свой ответ, похоже, экспериментальная поддержка доступна и в версии 8. Так что вы можете попробовать мой второй вариант, если первый все еще не работает (я снова проверил, и оба варианта работают в 8.9.4)
Я просто хочу сделать обзор, кто попал в эту ситуацию, потому что она очень болезненная. Во-первых, в ES6 нет поддержки Импорт Экспресс или требуется экспресс вместе, и, несмотря на это, мы можем реализовать его с помощью esm или динамичный бабель.
В чем причина, Джеймс объяснил здесь Обновление ES6
и причина Node.js, TC-39 и модули
В моем случае я использую импорт и требование в том же проекте, а также мне нужны функции отладки и горячей перезагрузки, я напал на эту ошибку и нашел способ. сначала я решаю использовать nodemon для отладки и горячей перезагрузки в моем package.json как показано ниже:
"debug-api": "nodemon --inspect -r esm src/api/server/index.js",
"debug-store": "nodemon --inspect -r esm dist/store/server/index.js",
"debug": "concurrently npm:debug-*" // if you add --source-maps to here it will make HMR
Я удалил файл .babelrc и определил загрузчики только в одном месте в веб-пакете, как показано ниже
use: {
loader: 'babel-loader',
options: {
presets: ["@babel/react", ["@babel/preset-env", {
"useBuiltIns": "usage",
"shippedProposals": true,
"debug": true,
"include": ["es7.promise.finally", "es7.symbol.async-iterator", "es6.array.sort"],
"modules": false,
}]
],
plugins: [
["@babel/plugin-transform-regenerator", {
"asyncGenerators": true,
"generators": true,
"async": true
}],
[
"@babel/plugin-transform-runtime",
{
"corejs": false,
"helpers": true,
"regenerator": true,
"useESModules": true
}
],
"@babel/plugin-proposal-class-properties",
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-syntax-object-rest-spread",
"react-hot-loader/babel"]
}
}
},
И в и я могу забрать процесс из консоли отладки vscode, launch.json, как показано ниже
{
"type": "node",
"request": "attach",
"name": "Node: Nodemon",
"processId": "${command:PickProcess}",
"restart": true,
"protocol": "inspector",
},
Теперь он работает с отладкой и горячей перезагрузкой, если есть упущенная проблема или функция, пожалуйста, прокомментируйте
используйте require вместо import. это может помочь Например : напишите это:
const express = require('express')
вместо:
import express from 'express'
Это происходит, если у вас более ранняя версия node. пожалуйста, обновите его как минимум до версии 10.0
лучше использовать
const express = require('express');
вместо
import express from 'express';
Я думаю, вам также нужно установить babel-core.