Unexpected reserved word 'import' when using babel

32,478

Solution 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

Solution 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/

Share:
32,478

Related videos on Youtube

rcjsdev
Author by

rcjsdev

Updated on April 23, 2020

Comments

  • rcjsdev
    rcjsdev about 4 years

    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)
    
    • max
      max over 8 years
      what version of Babel?
    • rcjsdev
      rcjsdev over 8 years
      "babel-core": "^6.1.21"
    • max
      max over 8 years
      have you included any Babel plugins or presets?
    • rcjsdev
      rcjsdev over 8 years
      nope, i tried es2015preset but this broke my app as well, i got an issue where it was saying the following was undefined: $passport = require('passport');
    • w00t
      w00t over 8 years
      Is this on line 1? The error is being reported by the babel module.
    • Felix Kling
      Felix Kling over 8 years
      Please read the tag descriptions. babel is for questions for a Python library with said name.
    • max
      max over 8 years
      @Rob with the es2015 preset, if you change $passport = require('passport'); to var $passport = require('passport');, do you still see that error?
    • ian
      ian over 8 years
      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
    • Jayesh
      Jayesh about 8 years
      Also make sure you have correct .babelrc. That was the problem in my case.
    • Jules
      Jules almost 7 years
      @ian - the stack dump includes this line: at loader (/Users/*/Documents/Web/*/node_modules/babel-core/node_modul‌​es/babel-register/li‌​b/node.js:128:5) which sure sounds like babel-register is being used to me...
  • rcjsdev
    rcjsdev over 8 years
    I have subsequent requires which the require other things does this work okay w/ babel?
  • Admin
    Admin about 8 years
    where does this code belong? in a webpack config? in a babelconfig? in the code that I'm running?
  • Arkadiy Kukarkin
    Arkadiy Kukarkin about 8 years
    @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
  • ArtHare
    ArtHare about 8 years
    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
    Fractalf about 8 years
    I tried all that is mentioned here, but still I get this error. Very annoying. I got the top require("babel-core/register"); upgraded node/npm to 4.4/3.8.1. Have a file .babelrc with { "presets": ["es2015"] }. Installed babel-core, babel-register, babel-preset-2015. My node file has just the require above and import asap from "asap"; right under...
  • Arkadiy Kukarkin
    Arkadiy Kukarkin about 8 years
    @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
  • Fractalf
    Fractalf about 8 years
    @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 :(
  • Fractalf
    Fractalf about 8 years
  • yussan
    yussan about 8 years
    it's working after i place on very top of line on my app file root, thanks
  • JREAM
    JREAM almost 6 years
    use babel-preset-env it covers babel-preset-2015-17 and its going to recommend it.
  • 2080
    2080 over 5 years
    I created a .babelrc in the root directory of the project and added { "presets": ["es2015"] } to it