Подтвердить что ты не робот

Неожиданное зарезервированное слово "импорт" при использовании babel

Использование Babel в моем коде NodeJSv4.1.1.

Получил требуемый крючок в:

require("babel-core/register");

$appRoot = __dirname;

module.exports = require("./lib/controllers/app");

В последующем lodaded .js файле, который я делаю:

import { Strategy as LocalStrategy } from "passport-local";

Однако это вызывает следующую ошибку в CLI:

import { Strategy as LocalStrategy } from "passport-local";
^^^^^^

SyntaxError: Unexpected reserved word
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:413:25)
    at loader (/Users/*/Documents/Web/*/node_modules/babel-core/node_modules/babel-register/lib/node.js:128:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/*/Documents/Web/*/node_modules/babel-core/node_modules/babel-register/lib/node.js:138:7)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at module.exports (index.js:9:5)
    at Object.<anonymous> (app.js:102:39)
4b9b3361

Ответ 1

Похоже, вы не используете правые пресеты. Начиная с babel 6, базовый загрузчик babel больше не включает ожидаемые преобразования ES6 по умолчанию (теперь это платформа общего кода трансформатора), вместо этого вы должны использовать пресет:

require('babel-register')({
        "presets": ["es2015"]
});

Вам также потребуется установить пакет предустановок:

npm install --save-dev babel-preset-es2015

Ответ 2

Кажется, что этот файл не переполняется. Загружен ли этот файл .js в каталог node_modules? Если это так, вам необходимо:

require("babel-core/register")({
  // This will override `node_modules` ignoring - you can alternatively pass
  // an array of strings to be explicitly matched or a regex / glob
  ignore: false
});

По умолчанию все требует node_modules, будет проигнорировано. Вы можете переопределить это, передав регулярное выражение ignore

https://babeljs.io/docs/usage/require/

Ответ 3

Я столкнулся с проблемой при попытке запустить тесты через мокко, и я решил это, поместив это в мой файл package.json:

"babel": {
    "presets": [
      "es2015"
    ]
},

Я не совсем понимаю, как это работает. Я запускаю тесты следующим образом:

mocha --compilers js:babel-core/register --require ./test/test_helper.js --recursive

В конце концов, все это будет иметь смысл, я полагаю.