Я не понимаю, что не так. Узел v5.6.0 NPM v3.10.6
Код:
function (exports, require, module, __filename, __dirname) {
import express from 'express'
};
Ошибка:
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:140:18)
at node.js:1001:3
javascript
node.js
npm
ecmascript-6
SofDroid
источник
источник
Ответы:
Обновление 3: начиная с узла 13 , вы можете использовать расширение .mjs или установить «type»: «module» в вашем package.json. Вам не нужно использовать
--experimental-modules
флаг.Обновление 2: начиная с узла 12 , вы можете использовать либо
.mjs
расширение, либо установить его"type": "module"
в package.json. И вам нужно запустить узел с--experimental-modules
флагом.Обновление: в узле 9 он включен за флагом и использует
.mjs
расширение.Хотя
import
он действительно является частью ES6, он, к сожалению, еще не поддерживается в NodeJS по умолчанию и только недавно получил поддержку в браузерах.Смотрите таблицу сравнения браузеров на MDN и эту проблему с узлом .
Из обновления Джеймса М. Снелла о модулях ES6 в Node.js (февраль 2017 г.):
Пока поддержка не появится изначально, вам придется продолжать использовать классические
require
операторы:Если вы действительно хотите использовать новые функции ES6 / 7 в NodeJS, вы можете скомпилировать его с помощью Babel. Вот пример сервера .
источник
К сожалению, Node.js пока не поддерживает ES6
import
.Чтобы выполнить то, что вы пытаетесь сделать (импортировать модуль Express), этого кода должно хватить
Кроме того, убедитесь, что у вас установлен Express, запустив
См. Документацию Node.js для получения дополнительной информации об изучении Node.js.
источник
import
не обязательно является функцией TypeScript. TypeScript - это ES6 с набором текста. Так что, например, импорт - это ES6.node index.js
работает для меня, но когда я бегу,node dist/main.js
я тоже получаюUnexpected token import
.index.js
мимо, не означает, что тыdist/main.js
тоже проходишь.Как упоминалось в других ответах, Node JS в настоящее время не поддерживает импорт ES6.
(На данный момент читайте РЕДАКТИРОВАТЬ 2)
Включение импорта ES6 в узле js обеспечивает решение этой проблемы. Я попробовал это, и это сработало для меня.
Запустите команду:
Теперь вам нужно создать новый файл (config.js) и добавить в него следующий код.
Теперь вы можете писать операторы импорта без ошибок.
Надеюсь это поможет.
РЕДАКТИРОВАТЬ:
Вам нужно запустить новый файл, который вы создали с кодом выше. В моем случае это было
config.js
. Поэтому я должен бежать:РЕДАКТИРОВАТЬ 2:
Экспериментируя, я нашел одно простое решение этой проблемы.
Создайте
.babelrc
файл в корне вашего проекта.Добавьте следующее (и любые другие предустановки Babel, которые вам нужны, можно добавить в этот файл):
Установите
babel-preset-env
с помощью командыnpm install babel-preset-env --save
, а затем установитеbabel-cli
с помощью командыnpm install babel-cli -g --save
Теперь перейдите в папку, где находится ваш сервер или индексный файл, и запустите с помощью: babel-node fileName.js
Или вы можете запустить используя
npm start
, добавив следующий код в вашpackage.json
файл:источник
"start": "babel-node electron .",
но не повезлоОшибка: SyntaxError: Неожиданный импорт токена или SyntaxError: Неожиданный экспорт токена
Решение: измените все ваши импорта в качестве примера
А также измените свой
export default = foo;
наmodule.exports = foo;
источник
Я в шоке
esm
не упоминалось. Этот небольшой, но могучий пакет позволяет использовать либоimport
илиrequire
.Установите esm в свой проект
$ npm install --save esm
Обновите скрипт запуска узла, чтобы использовать esm
node -r esm app.js
esm
просто работает. Я потратил ТОНУ времени.mjs
и--experimental-modules
только для того, чтобы узнать, что.mjs
файл не может импортировать файл, который используетrequire
илиmodule.exports
. Это была огромная проблема, в то время какesm
позволяет вам смешивать и сочетать, и это просто выясняет ...esm
просто работает.источник
В случае, если вы все еще не можете использовать «импорт», вот как я справился: просто переведите его в дружественный узел. Пример:
Такой же как:
источник
export
ключевое словоexport
ключевого слова, в любом случае спасибо за вашу полезную заметку!В предложении Babel 7 вы можете добавить зависимости от разработчиков
и добавьте .babelrc в корень
и добавьте в файл .js
или если вы запустите его в cli, вы можете использовать крючок require как -r @ babel / register, ex.
источник
если вы можете использовать 'babel', попробуйте добавить сценарии сборки в package.json (- presets = es2015), как показано ниже. это сделать, чтобы прекомпилировать код импорта в es2015
источник
npm start
сначала выполнить «сборку» или сначала «начать»? (Старт в настоящее время определен:"nodemon src/app.js --exec \"npm run lint && node\"",
По состоянию на Node.js v12 (и это, вероятно , достаточно стабильно, но по- прежнему отмечены «экспериментальным»), у вас есть несколько вариантов для использования ESM ( E CMA S cript M odules) в Node.js (для файлов, есть третий способ оценки строк), вот что говорится в документации :
источник
Когда я начинал с Express, всегда хотел решение использовать импорт, а не требовать
Много раз прохожу эту строчку:
Unfortunately, Node.js doesn't support ES6's import yet.
Теперь, чтобы помочь другим, я создаю два новых решения здесь
1) esm : -
Исключительно простой, не требующий больших затрат, загрузчик модулей ECMAScript. давайте заставим это работать
создайте start.js или используйте ваше пространство имен
Измените свой
package.josn
путь прохожденияstart.js
2) Babel JS : -
Это можно разделить на 2 части
а) Решение 1 благодаря timonweb.com
б) Решение 2
используйте Babel 6 (более старая версия babel-preset-stage-3 ^ 6.0 ) для создания
.babelrc
файла в корневой папкеУстановите babel-preset-stage-3
Изменение в package.json
Запустите свой сервер
Ооо нет, мы создаем новую проблему
Эта ошибка появляется только тогда, когда вы используете async / await в своем коде. Затем используйте polyfill, который включает пользовательскую среду выполнения регенератора и core-js. добавить сверху
index.js
Это позволяет вам использовать async / await
использовать Вавилон 7
Нужно обновлять каждую вещь в вашем проекте, чтобы начать с babel 7 .babelrc
Некоторые изменения в package.json
и использовать
import "@babel/polyfill"
в начальной точкеТы думаешь почему
start:dev
Шутки в сторону. Это хороший вопрос, если вы новичок. Каждое изменение вы каждый раз запускаете с сервера запуска, а затем используете в
yarn start:dev
качестве сервера разработки. Каждое изменение автоматически перезапускает сервер, чтобы узнать больше о nodemon.источник
В моем случае он присматривал за
.babelrc
файлом, и он должен содержать что-то вроде этого:источник