“unexpected token import” in Nodejs5 and babel?

前端 未结 13 2059
清酒与你
清酒与你 2020-11-30 18:40

In js file, i used import to instead of require

import co from \'co\';

And tried to run it directly by nodejs since it said import is \'shi

相关标签:
13条回答
  • 2020-11-30 19:09

    I have done the following to overcome the problem (ex.js script)

    problem

    $ cat ex.js
    import { Stack } from 'es-collections';
    console.log("Successfully Imported");
    
    $ node ex.js
    /Users/nsaboo/ex.js:1
    (function (exports, require, module, __filename, __dirname) { import { Stack } from 'es-collections';
                                                                  ^^^^^^
    
    SyntaxError: Unexpected token import
        at createScript (vm.js:80:10)
        at Object.runInThisContext (vm.js:152:10)
        at Module._compile (module.js:624:28)
        at Object.Module._extensions..js (module.js:671:10)
        at Module.load (module.js:573:32)
        at tryModuleLoad (module.js:513:12)
        at Function.Module._load (module.js:505:3)
        at Function.Module.runMain (module.js:701:10)
        at startup (bootstrap_node.js:194:16)
        at bootstrap_node.js:618:3
    

    solution

    # npm package installation
    npm install --save-dev babel-preset-env babel-cli es-collections
    
    # .babelrc setup
    $ cat .babelrc
    {
      "presets": [
        ["env", {
          "targets": {
            "node": "current"
          }
        }]
      ]
    }
    
    # execution with node
    $ npx babel ex.js --out-file ex-new.js
    $ node ex-new.js
    Successfully Imported
    
    # or execution with babel-node
    $ babel-node ex.js
    Successfully Imported
    
    0 讨论(0)
  • 2020-11-30 19:15

    From the babel 6 Release notes:

    Since Babel is focusing on being a platform for JavaScript tooling and not an ES2015 transpiler, we’ve decided to make all of the plugins opt-in. This means when you install Babel it will no longer transpile your ES2015 code by default.

    In my setup I installed the es2015 preset

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

    or with yarn

    yarn add babel-preset-es2015 --dev
    

    and enabled the preset in my .babelrc

    {
      "presets": ["es2015"]
    }
    
    0 讨论(0)
  • 2020-11-30 19:16

    Until modules are implemented you can use the Babel "transpiler" to run your code:

    npm install --save babel-cli babel-preset-node6
    

    and then

    ./node_modules/babel-cli/bin/babel-node.js --presets node6 ./your_script.js
    

    If you dont want to type --presets node6 you can save it .babelrc file by:

    {
      "presets": [
        "node6"
      ]
    }
    

    See https://www.npmjs.com/package/babel-preset-node6 and https://babeljs.io/docs/usage/cli/

    0 讨论(0)
  • 2020-11-30 19:16

    if you use the preset for react-native it accepts the import

    npm i babel-preset-react-native --save-dev
    

    and put it inside your .babelrc file

    {
      "presets": ["react-native"]
    }
    

    in your project root directory

    https://www.npmjs.com/package/babel-preset-react-native

    0 讨论(0)
  • 2020-11-30 19:16

    It may be that you're running uncompiled files. Let's start clean!

    In your work directory create:

    • Two folders. One for precompiled es2015 code. The other for babel's output. We'll name them "src" and "lib" respectively.
    • A package.json file with the following object:

      { 
        "scripts": {
            "transpile-es2015": "babel src -d lib"
        },
        "devDependencies": {
            "babel-cli": "^6.18.0",
            "babel-preset-latest": "^6.16.0"
        }
      }
      
    • A file named ".babelrc" with the following instructions: {"presets": ["latest"]}

    • Lastly, write test code in your src/index.js file. In your case: import co from 'co'.

    Through your console:

    • Install your packages: npm install
    • Transpile your source directory to your output directory with the -d (aka --out-dir) flag as, already, specified in our package.json: npm run transpile-es2015
    • Run your code from the output directory! node lib/index.js
    0 讨论(0)
  • 2020-11-30 19:18
    1. Install packages: babel-core, babel-polyfill, babel-preset-es2015
    2. Create .babelrc with contents: { "presets": ["es2015"] }
    3. Do not put import statement in your main entry file, use another file eg: app.js and your main entry file should required babel-core/register and babel-polyfill to make babel works separately at the first place before anything else. Then you can require app.js where import statement.

    Example:

    index.js

    require('babel-core/register');
    require('babel-polyfill');
    require('./app');
    

    app.js

    import co from 'co';
    

    It should works with node index.js.

    0 讨论(0)
提交回复
热议问题