Unexpected reserved word 'import' when using babel

匿名 (未验证) 提交于 2019-12-03 01:49:02

问题:

Using Babel in my NodeJSv4.1.1 code.

Got the require hook in:

require("babel-core/register");  $appRoot = __dirname;  module.exports = require("./lib/controllers/app"); 

In a subsequently lodaded .js file I am doing:

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

However this is generating the following error in the 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. (app.js:102:39) 

回答1:

Sounds like you aren't using the right presets. As of babel 6, the core babel loader no longer includes the expected ES6 transforms by default (it's now a generic code transformer platform), instead you must use a preset:

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

You will also need to install the preset package:

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


回答2:

It seems that this file is not being transpiled. Is this subsequently loaded .js file in the node_modules directory? If so, you need to:

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 }); 

By default all requires to node_modules will be ignored. You can override this by passing an ignore regex

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



回答3:

I was hitting the problem when trying to run tests via mocha, and I solved it by putting this in my package.json file:

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

I'm not completely clear on how this works. I'm running tests like this:

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

Eventually, this will all make sense I suppose.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!