使用babel时出现意外的保留字'import'

时间:2015-11-14 15:59:22

标签: javascript node.js ecmascript-6 babeljs

在我的NodeJSv4.1.1代码中使用Babel。

获得了需要的钩子:

require("babel-core/register");

$appRoot = __dirname;

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

在我正在做的随后的.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)

3 个答案:

答案 0 :(得分:25)

听起来你没有使用正确的预设。从babel 6开始,核心babel加载器默认不再包含预期的ES6转换(它现在是通用代码转换器平台),而是必须使用预设:

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

您还需要安装预设包:

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

答案 1 :(得分:3)

似乎这个文件没有被翻译过来。这是后续加载的.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 regex

来覆盖它

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

答案 2 :(得分:0)

我试图通过mocha运行测试时遇到了问题,我把它放在我的package.json文件中解决了这个问题:

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

我不清楚它是如何工作的。我正在运行这样的测试:

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

最终,我认为这一切都有意义。