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

jov*_*ovi 192 javascript node.js ecmascript-6 package.json babeljs

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

import co from 'co';
Run Code Online (Sandbox Code Playgroud)

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

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

SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)

然后我试着用巴贝尔

npm install -g babel-core
npm install -g babel-cli
npm install babel-core //install to babel locally, is it necessary?
Run Code Online (Sandbox Code Playgroud)

并运行

babel-node js.js
Run Code Online (Sandbox Code Playgroud)

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

我怎么能摆脱它?

小智 200

来自babel 6发行说明:

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

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

npm install --save-dev babel-preset-es2015
Run Code Online (Sandbox Code Playgroud)

或用纱线

yarn add babel-preset-es2015 --dev
Run Code Online (Sandbox Code Playgroud)

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

{
  "presets": ["es2015"]
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用`babel-node`和`es2015`和`react`预设.同样的错误. (24认同)
  • 好答案.不幸的是,您仍然需要使用require()并且不能对npm包使用import. (14认同)
  • 对我来说这是一个简单的修复.我陷入了隧道视觉,试图将代码从一个反应/ babel项目调整到另一个es5项目并同时升级到es6语法.在脚本下的package.json中,我忘了将"node run"替换为"babel-node run.js".是的,我感到羞怯.:) (6认同)
  • 不行.是的,这是必要的,但它不会导致导入工作. (3认同)
  • JS生态系统非常简单 (2认同)

vin*_*hew 51

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

npm install --save babel-cli babel-preset-node6
Run Code Online (Sandbox Code Playgroud)

然后

./node_modules/babel-cli/bin/babel-node.js --presets node6 ./your_script.js
Run Code Online (Sandbox Code Playgroud)

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

{
  "presets": [
    "node6"
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

  • 来自babel人的最新推荐是使用[babel-preset-env](https://github.com/babel/babel-preset-env)来检测哪些polyfill运行,而不是'babel-preset-node*` .在`.babelrc`中使用:`{"presets":[["env",{"targets":{"node":"current"}}]]} (16认同)

Adi*_*ono 26

  1. 安装软件包:babel-core,babel-polyfill,babel-preset-es2015
  2. 创建.babelrc内容:{ "presets": ["es2015"] }
  3. 不要import在主条目文件中放置语句,使用另一个文件,例如:app.js并且您的主条目文件应该是必需的,babel-core/register并且babel-polyfill让babel在第一个地方之前单独工作.然后你可以要求app.jswhere import语句.

例:

index.js

require('babel-core/register');
require('babel-polyfill');
require('./app');
Run Code Online (Sandbox Code Playgroud)

app.js

import co from 'co';
Run Code Online (Sandbox Code Playgroud)

它应该适用node index.js.


kri*_*ina 14

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

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

npm install babel-preset-env --save-dev
Run Code Online (Sandbox Code Playgroud)

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

{
  "presets": ["env"]
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Babel文档.


小智 6

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

npm i babel-preset-react-native --save-dev
Run Code Online (Sandbox Code Playgroud)

并将其放入.babelrc文件中

{
  "presets": ["react-native"]
}
Run Code Online (Sandbox Code Playgroud)

在您的项目根目录中

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


小智 5

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

在您的工作目录中创建:

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

    { 
      "scripts": {
          "transpile-es2015": "babel src -d lib"
      },
      "devDependencies": {
          "babel-cli": "^6.18.0",
          "babel-preset-latest": "^6.16.0"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 名为".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


Isa*_*tte 5

目前的方法是使用:

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

然后进去 .babelrc

{
    "presets": ["env"]
}
Run Code Online (Sandbox Code Playgroud)

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

在运行js文件时,不要忘记添加babel-nodepackage.json使用中的脚本,如下所示.

"scripts": {
   "test": "mocha",
    //Add this line to your scripts
   "populate": "node_modules/babel-cli/bin/babel-node.js" 
},
Run Code Online (Sandbox Code Playgroud)

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

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

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

然后 npm run populate