首页 文章

Nodejs5和babel中的“意外令牌导入”?

提问于
浏览
187

在js文件中,我使用import而不是require

import co from 'co';

并尝试直接由nodejs运行它,因为它说导入是'shipping features'并且支持没有任何运行时标志(https://nodejs.org/en/docs/es6/),但是我收到了一个错误

import co from 'co';
^^^^^^

SyntaxError: Unexpected token import

然后我试着用巴贝尔

npm install -g babel-core
npm install -g babel-cli
npm install babel-core //install to babel locally, is it necessary?

并运行

babel-node js.js

仍有同样的错误,意外的令牌导入?

我怎么能摆脱它?

13 回答

  • 1

    来自babel 6发行说明:

    由于Babel专注于成为JavaScript工具的平台,而不是ES2015转换器,我们决定让所有插件选择加入 . 这意味着当您安装Babel时,它将不再默认转换您的ES2015代码 .

    在我的设置中,我安装了es2015预设

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

    或用纱线

    yarn add babel-preset-es2015 --dev
    

    并在我的.babelrc中启用了预设

    {
      "presets": ["es2015"]
    }
    
  • 26

    在实现模块之前,您可以使用Babel“transpiler”来运行代码:

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

    然后

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

    如果您不想键入 --presets node6 ,可以将其保存.babelrc文件:

    {
      "presets": [
        "node6"
      ]
    }
    

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

  • 5
    • 安装包: babel-corebabel-polyfillbabel-preset-es2015

    • 创建 .babelrc ,内容为: { "presets": ["es2015"] }

    • 不要在您的主条目文件中放置 import 语句,使用另一个文件,例如: app.js 并且您的主条目文件应该需要 babel-core/registerbabel-polyfill 以使babel在其他任何地方之前分开工作 . 然后你可以要求 app.js where import 语句 .

    例:

    index.js

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

    app.js

    import co from 'co';
    

    它应该适用于 node index.js .

  • 5

    babel-preset-es2015 现已弃用,您可以使用'll get a warning if you try to use Laurence'解决方案 .

    要使用Babel 6.24.1,请使用 babel-preset-env 代替:

    npm install babel-preset-env --save-dev
    

    然后将 env 添加到 .babelrc 中的预设中:

    {
      "presets": ["env"]
    }
    

    有关详细信息,请参阅the Babel docs .

  • 193

    可能是您正在运行未编译的文件 . 我们开始吧!

    在您的工作目录中创建:

    • 两个文件夹 . 一个用于预编译的es2015代码 . 另一个为babel 's output. We' ll分别命名为"src"和"lib" .

    • 包含以下对象的package.json文件:

    { 
      "scripts": {
          "transpile-es2015": "babel src -d lib"
      },
      "devDependencies": {
          "babel-cli": "^6.18.0",
          "babel-preset-latest": "^6.16.0"
      }
    }
    
    • 名为".babelrc"的文件,其中包含以下说明: {"presets": ["latest"]}

    • 最后,在src / index.js文件中编写测试代码 . 在你的情况下: import co from 'co'.

    通过您的控制台:

    • 安装包裹: npm install

    • 使用-d(aka --out-dir)标志将源目录透明到输出目录,该标志已在package.json中指定: npm run transpile-es2015

    • 从输出目录运行代码! node lib/index.js

  • 2

    如果你使用react-native的预设它接受导入

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

    并将其放入.babelrc文件中

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

    在您的项目根目录中

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

  • 14

    目前的方法是使用:

    npm install --save-dev babel-cli babel-preset-env

    然后在 .babelrc

    {
        "presets": ["env"]
    }
    

    这个安装Babel支持最新版本的js(es2015及更高版本)查看babeljs

    在运行js文件时,不要忘记将 babel-node 添加到 package.json 中的脚本中,如下所示 .

    "scripts": {
       "test": "mocha",
        //Add this line to your scripts
       "populate": "node_modules/babel-cli/bin/babel-node.js" 
    },
    

    现在你可以 npm populate yourfile.js 在终端内 .

    如果您正在运行Windows并且运行错误内部或外部命令无法识别,请使用脚本的节点infront,如下所示

    node node_modules/babel-cli/bin/babel-node.js

    那么 npm run populate

  • 1
    • 安装 - > "npm i --save-dev babel-cli babel-preset-es2015 babel-preset-stage-0"

    在package.json文件中添加脚本 "start": "babel-node server.js"

    {
      "name": "node",
      "version": "1.0.0",
      "description": "",
      "main": "server.js",
      "dependencies": {
        "body-parser": "^1.18.2",
        "express": "^4.16.2",
        "lodash": "^4.17.4",
        "mongoose": "^5.0.1"
      },
      "devDependencies": {
        "babel-cli": "^6.26.0",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-stage-0": "^6.24.1"
      },
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "babel-node server.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    

    并在root“.babelrc”中为babel创建文件

    {
        "presets":[
            "es2015",
            "stage-0"
        ]
    }
    

    并在终端运行npm start

  • -3

    请参与以下步骤来解决此问题:

    1)安装 CLI and env preset

    $ npm install --save-dev babel-cli babel-preset-env
    

    2)创建 .babelrc 文件

    {
      "presets": ["env"]
    }
    

    3)在 package.json 中配置npm start

    "scripts": {
        "start": "babel-node ./server/app.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      }
    

    4)然后启动应用程序

    $ npm start
    
  • 51

    @jovi你需要做的就是像这样添加.babelrc文件:

    {
      "plugins": [
        "transform-strict-mode",
        "transform-es2015-modules-commonjs",
        "transform-es2015-spread",
        "transform-es2015-destructuring",
        "transform-es2015-parameters"
      ]
    }
    

    并使用npm将这些插件安装为devdependences .

    然后再次尝试babel-node *** . js . 希望这可以帮到你 .

  • 5

    您必须使用 babel-preset-envnodemon 进行热重新加载 .

    然后使用以下内容创建.babelrc文件:

    {
      "presets": ["env"]
    }
    

    最后,在package.json中创建脚本:

    "scripts": {
        "babel-node": "babel-node --presets=env",
        "start": "nodemon --exec npm run babel-node -- ./index.js",
        "build": "babel src -d dist"
      }
    

    或者只使用这个样板:

    Boilerplate: node-es6

  • 1

    我已经做了以下事情来克服这个问题(ex.js脚本)

    问题

    $ 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
    

    解决方案

    # 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

    在您的应用中,您必须声明 require() 模块,而不是使用'import'关键字:

    const app = require("example_dependency");
    

    然后,创建一个.babelrc文件:

    {
    "presets": [ 
        ["es2015", { "modules": false }]
    ]
    }
    

    然后,在你的gulpfile中,一定要声明你的 require() 模块:

    var gulp = require("gulp");
    

相关问题