在Nodejs5和babel中出现了"unexpected token import"的错误?

198
在js文件中,我使用了import代替require。
import co from 'co';

由于它说 import 是“shipping features” 并支持没有任何运行时标志 (https://nodejs.org/en/docs/es6/),我尝试直接通过 nodejs 运行它,但是出现了错误。

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

我仍然遇到相同的错误,意外的import标记?

我该如何摆脱它?


14
尽管链接问题的答案确实也回答了这个问题,但很难将这个问题视为那个问题的副本。无论如何,我很高兴在这里有这个问题,因为谷歌直接将我带到了这里,因为所描述的语法错误正好与我看到的相匹配。我真的很高兴OP发表了这篇文章,而不是搜索一个有些相关的问题,并恰好找到一个适合的答案。 - Scott Sauyet
3
这句话的意思是“这个命令修复了我的问题...”,具体翻译为“我使用npm i --save-dev babel-cli命令解决了我的问题...”。 - ChuckJHardy
2
我投票反对将此标记为重复,我认为这是一个独立的问题。 - T.W.R. Cole
3
这不是重复的。我想要发布的另一个解决方案是,确保你在.babelrc中有这个插件:"transform-es2015-modules-commonjs" - Dan Dascalescu
7
重复是(应该)可以接受的,这是人类工作方式的重要部分。@ScottSauyet所说的是其中一个原因。不同的解释和观点是另一个原因。对我来说,整个“寻找重复”的行为感觉非常无益,因为我作为一名多年的常规访问者希望它能停止。 - Stijn de Witt
对于较新版本的React,请使用新的Babel模块:https://stackoverflow.com/a/53927497/6665568。它具有更好的错误消息和支持React的新功能。 - Natesh bhat
13个回答

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

0

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

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

并使用npm将这些插件作为devdependence进行安装。

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


-4
在您的应用程序中,必须声明您的require()模块,而不使用'import'关键字:
const app = require("example_dependency");

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

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

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

var gulp = require("gulp");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接