Неожиданный экспорт токена при запуске приложения терминала - PullRequest
0 голосов
/ 29 июня 2018

Это похоже на обычный модуль и экспорт, не уверен, что это вызывает.

myES6Module.js

const showCar = () => {
   //...code
}

const drive = () => {
  //...code
};

drive();

export { drive, showCar }

Что странного в моих тестах Я могу импортировать и называть их просто отлично, и мои тесты используют их и проходят . Но когда я на самом деле запускаю drive () , который запускает приложение, запрашивая у пользователя ввод терминала, я получаю сообщение об ошибке:

SyntaxError: Unexpected token export at new Script (vm.js:74:7) at createScript (vm.js:246:10) at Proxy.runInThisContext (vm.js:298:10) at Module._compile (internal/modules/cjs/loader.js:670:28)

Почему это разрешает тестирование, а не выполнение кода в реальном времени?

Вот как я запускаю , скрипт в моем package.json :

"start": "node --experimental-modules ./myES6Module.js"

так что когда я бегу yarn start я получаю это. В противном случае, когда я запускаю свои тесты, drive () выводит на консоль просто отлично.

если я закомментирую этот экспорт, мой скрипт будет работать нормально ... но, конечно, это нарушит мои тесты, основанные на экспорте.

UPDATE

Я использую --experimental-modules

Итак, я попробовал это, так как у меня установлен babel-cli:

"start": "babel ./myES6Module.js"

package.json имеет следующие пакеты babel:

"@babel/cli": "^7.0.0-beta.51", "@babel/preset-env": "^7.0.0-beta.51", "@babel/register": "^7.0.0-beta.51", "@babel/core": "^7.0.0-beta.51",

но только что console.logged содержимое файла, он не запустился. Я тоже не хочу использовать --experimental-modules. Я не хочу менять свое расширение файла, так как мне это запустить?

Я посмотрел на это, и там упоминается о миграции, если вы уже используете babel-node, но это единственный способ?

https://babeljs.io/docs/en/next/v7-migration

1 Ответ

0 голосов
/ 29 июня 2018

Чтобы ответить на ваш первоначальный вопрос, вам нужно иметь расширение файла для файлов, равное .mjs, чтобы вы могли определить в ваших package.json сценариях:

"start": "node --experimental-modules myES6Module.mjs"

Вторая часть об удалении флага --experimental-modules, как вы заметили, только что вышла из содержимого файла при использовании babel. Чтобы обойти это, вы можете использовать babel-node, но обратите внимание на его предупреждение об использовании в производстве. В этом предупреждении вы найдете ссылку на Пример узла сервера с Babel , демонстрирующий работающее решение.

Чтобы получить результаты, которые вы получите после того, как я создал минимальное рабочее решение со следующим, которое работает для меня:

npm i babel-cli babel-preset-es2015

Обновите package.json до:

"start": "babel-node --presets es2015 myES6Module.js"

И рабочий .js файл с использованием export:

const showCar = () => {
  //...code
}

const drive = () => {
  //...code
  console.log('driving')
};

drive();

export { drive, showCar }

Babel 7

Если вы хотите использовать версию 7, попробуйте ниже.

npm i @babel/cli @babel/core @babel/node @babel/preset-env, поэтому ваш package.json имеет следующие зависимости:

"@babel/cli": "^7.0.0-beta.51",
"@babel/core": "^7.0.0-beta.51",
"@babel/node": "^7.0.0-beta.51",
"@babel/preset-env": "^7.0.0-beta.51"

Установите скрипт запуска на

"start": "babel-node myES6Module.js"

Создайте файл .babelrc на корневом уровне вашего проекта с помощью

{
  "presets": ["@babel/preset-env"]
}

Теперь вы можете выполнить npm run start с терминала, и вы должны увидеть вывод driving, зарегистрированный на терминале на основе моего примера кода.

Я не использовал версию 7 раньше, и в документах говорится, что файл .babelrc должен использовать "presets": ["env"], но я получил ошибку, однако выше и "presets": ["@babel/env"] работали одинаково. Кто-то другой может знать причину этой ошибки, с которой я столкнулся, но это для другого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...