"意外的令牌导入"在Nodejs5和babel?

时间:2015-11-09 07:41:41

标签: javascript node.js ecmascript-6 babeljs package.json

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

import co from 'co';

并试图直接由nodejs运行它,因为它说导入是运输功能'和支持没有任何运行时标志(https://nodejs.org/en/docs/es6/),但我得到一个错误

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

SyntaxError: Unexpected token import

然后我尝试使用babel

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

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

我怎么能摆脱它?

14 个答案:

答案 0 :(得分:197)

来自babel 6发行说明:

  

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

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

ng-include

或用纱线

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

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

yarn add babel-preset-es2015 --dev

答案 1 :(得分:51)

在实施模块之前,你可以使用Babel"转发器"运行你的代码:

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/

答案 2 :(得分:26)

  1. 安装包:babel-corebabel-polyfillbabel-preset-es2015
  2. 使用内容.babelrc
  3. 创建{ "presets": ["es2015"] }
  4. 请勿在您的主条目文件中添加import语句,请使用其他文件,例如:app.js,并且您的主条目文件需要babel-core/registerbabel-polyfill才能使babel工作在其他任何事情之前分别在第一个地方。然后,您可以要求app.js import声明。
  5. 示例:

    <强> index.js

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

    <强> app.js

    import co from 'co';
    

    它适用于node index.js

答案 3 :(得分:14)

babel-preset-es2015现已弃用,如果您尝试使用Laurence的解决方案,则会收到警告。

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

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

然后将env添加到.babelrc

中的预设中
{
  "presets": ["env"]
}

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

答案 4 :(得分:5)

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

在您的工作目录中创建:

  • 两个文件夹。一个用于预编译的es2015代码。巴贝尔的另一个 输出。我们将它们命名为&#34; src&#34;和&#34; lib&#34;分别
  • 包含以下对象的package.json文件:

    { 
      "scripts": {
          "transpile-es2015": "babel src -d lib"
      },
      "devDependencies": {
          "babel-cli": "^6.18.0",
          "babel-preset-latest": "^6.16.0"
      }
    }
    
  • 一个名为&#34; .babelrc&#34;的文件按照以下说明操作: {"presets": ["latest"]}

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

通过您的控制台:

  • 安装您的包裹: npm install
  • 使用-d(又名--out-dir)标志将源目录透明到输出目录,已经在package.json中指定: npm run transpile-es2015
  • 从输出目录运行代码! node lib/index.js

答案 5 :(得分:5)

如果您使用react-native的预设,则接受导入

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

并将其放入.babelrc文件

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

在项目根目录

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

答案 6 :(得分:5)

目前的方法是使用:

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

答案 7 :(得分:2)

  • 安装 - &gt; “npm i --save-dev babel-cli babel-preset-es2015 巴别预置级-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中为babel创建文件 “.babelrc”

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

并在终端

中运行npm start

答案 8 :(得分:2)

您必须使用 babel-preset-env nodemon 进行热重装。

然后创建具有以下内容的.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

答案 9 :(得分:1)

采取以下步骤解决问题:

1)安装 CLI和env预设

$ 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)然后启动app

$ npm start

答案 10 :(得分:1)

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

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

并使用npm安装这些插件作为独立性。

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

答案 11 :(得分:0)

我已经做了以下事情来克服这个问题(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

答案 12 :(得分:0)

对于仍然存在相同问题的用户,请按照以下步骤进行修复。

  1. 使用babel 7 @babel/core @babel/present-env @babel/node,依此类推...
  2. .babelrc添加到包含以下代码的项目的根目录中。
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}
  1. 确保使用bebel节点./node_modules/.bin/babel-node main.js的本地版本

现在,您应该可以使用import/export语句了,祝您黑客愉快。

答案 13 :(得分:-4)

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

const app = require("example_dependency");

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

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

然后,在您的gulpfile中,请务必声明您的require()模块:

var gulp = require("gulp");