У меня есть проект ApolloServer, который доставляет мне неприятности, поэтому я подумал, что могу обновить его и столкнулся с проблемами при использовании последней версии Babel. Мой "index.js" это:
require('dotenv').config()
import {startServer} from './server'
startServer()
И когда я запускаю его, я получаю сообщение об ошибке «SyntaxError: Невозможно использовать оператор импорта вне модуля». Сначала я попытался сделать что-то, чтобы убедить TPTB *, что это был модуль (но безуспешно). Поэтому я изменил «импорт» на «требовать», и это сработало.
Но теперь у меня есть около двух десятков «импортов» в других файлах, выдающих мне ту же ошибку.
* Я уверен, что корень моей проблемы в том, что я даже не уверен, что жалуется на проблему. Я вроде бы предположил, что это был Babel 7 (так как я пришел из Babel 6, и мне пришлось сменить пресеты), но я не уверен на 100%.
Большая часть того, что я нашел для решений, похоже, не относится к прямому Node. Как этот здесь:
Импорт модуля ES6, выдающий «Uncaught SyntaxError: Неожиданный идентификатор»
Говорит, что это было решено добавлением «type = module», но это обычно происходит в HTML, которого у меня нет. Я также попытался использовать старые пресеты моего проекта:
"presets": ["es2015", "stage-2"],
"plugins": []
Но это вызывает у меня еще одну ошибку: «Ошибка: файлы плагинов / пресетов не могут экспортировать объекты, только функции».
ОБНОВЛЕНИЕ: Вот зависимости, с которых я начал:
"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",
источник
jest.config.js
к'ts-jest/presets/js-with-ts'
- до сих пор некоторые другие вопросы , но решить это один большой. ..... да, моя проблема была связана с тестированием ... нормальные сборки были в порядкеОтветы:
Обновление 2020 (Узел 13.2.0+)
Убедитесь, что у вас установлена последняя версия Node. Не
--experimental-modules
флаг больше не нужен. Просто выполните одно из следующих действий :"type": "module"
к ближайшему родителюpackage.json
. При этом все.js
и.mjs
файлы интерпретируются как модули ES. Вы можете интерпретировать отдельные файлы как CommonJS, используя.cjs
расширение.ИЛИ
.mjs
расширением. Все остальные файлы, например,.js
будут интерпретироваться как CommonJS, который используется по умолчанию, еслиtype
он не определен вpackage.json
.источник
Согласно официальному документу ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Чтобы Node рассматривал ваш файл как модуль ES, вам необходимо ( https://nodejs.org/api/esm.html#esm_enabling ):
источник
У меня была та же проблема, и следующие исправили ее (используя узел 12.13.1):
дополнительная информация: https://nodejs.org/api/esm.html
источник
У меня была эта проблема в молодом проекте Express API.
Код сервера-нарушителя в
src/server/server.js
:Здесь были мои зависимости:
И вот бегун, который бросил ошибку:
Это было неприятно, так как у меня был похожий проект Express, который работал нормально.
Первым решением было добавить эту зависимость:
А затем подключить его, используя
babel.config.js
в корне проекта:Я не совсем понимаю, почему это работает, но я скопировал это из авторитетного источника , поэтому я счастлив придерживаться этого.
источник
:-)
источник
Мое решение состояло в том, чтобы включить путь babel-node при запуске nodemon следующим образом:
Вы можете добавить в свой скрипт package.json как:
ПРИМЕЧАНИЕ. Мой входной файл - index.js, замените его вашим входным файлом (у многих есть app.js / server.js).
источник