27

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.<anonymous> (app.js:102:39)
10
  • what version of Babel? Commented Nov 14, 2015 at 17:47
  • "babel-core": "^6.1.21" Commented Nov 14, 2015 at 18:09
  • have you included any Babel plugins or presets? Commented Nov 14, 2015 at 18:54
  • 1
    @Rob with the es2015 preset, if you change $passport = require('passport'); to var $passport = require('passport');, do you still see that error? Commented Nov 15, 2015 at 15:03
  • 1
    This is a common error when running plain Node, which means you're likely seeing this because Babel isn't actually running. I would recommend switching over the the babel-register module as suggested by the docs since you're using Babel 6. Then make sure the file in question isn't getting ignored. See @pherris' comment below Commented Dec 21, 2015 at 4:14

3 Answers 3

25

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
Sign up to request clarification or add additional context in comments.

10 Comments

where does this code belong? in a webpack config? in a babelconfig? in the code that I'm running?
@omouse you'd usually put this into whatever your main entrypoint is, typically index.js at the top level, before requiring the rest of your code
As a little addition, I had to npm install --save-dev babel-preset-es2015 since it didn't come by default with babel-register. But this answer worked for me!
@Fractalf: the transpiler from babel-register does not apply to the file in which it is required, so you cannot use import in the same file. You must instead require another file which can then use full es2015 semantics
@ArkadiyKukarkin: thanks, so I tried to just require the es6 module and use babel-core in only that module, but then there is the same error just complaining about export. I got it all working with babel-node, and then just building it, but man how hard is this for a first time user! Very bad documentation for those who didn't touch babel yet :(
|
3

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/

1 Comment

I have subsequent requires which the require other things does this work okay w/ babel?
0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.