节点错误:SyntaxError:意外的令牌导入

时间:2016-06-04 19:27:24

标签: node.js babel

我不明白出了什么问题。我检查了其他论坛谈论翻译和巴贝尔。我该怎么办?

node -v
v5.5.0

我的代码:

import recast from 'recastai'

和错误

(function (exports, require, module, __filename, __dirname) { import recast from 'module1'
                                                              ^^^^^^

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:139:18)
    at node.js:999:3

6 个答案:

答案 0 :(得分:40)

ES6导入是最近推出的功能,目前稳定版本的Node尚不支持它们。 Node.js问题跟踪器有一个open issue - 但是在V8和Node添加对此功能的支持之前,您需要使用一个转换器(最常用的是babel)才能使用导入

为了快速尝试转换,babel提供了一个基于Web的REPL。 This one演示了您的代码被转换。

babel project homepage 指向相关资源,以便开始使用Babel并将其与您的开发工作流程集成。

对于最简单的设置,请访问此setup page并在Babel内置部分中选择CLI。

这基本上涉及三个简单的步骤:

  1. 安装babel-cli:npm install --save-dev babel-cli babel-preset-es2015
  2. 创建.babelrc配置文件:echo '{ "presets": ["es2015"] }' > .babelrc
  3. 使用已安装的模块转换源代码:./node_modules/.bin/babel src -d lib
  4. 上述设置页面还说明了如何添加npm脚本以简化最后一步。或者,您可以将babel与编辑器或构建链集成,以便在更改时自动编译文件。

答案 1 :(得分:7)

如果你不想处理babel。这个对我有用。

const calc = require('./my_calc');
let {add, multiply} = calc;

答案 2 :(得分:5)

1)安装最新的预设

yarn add --dev babel-preset-latest

2)创建.babelrc并添加以下内容

{
    "presets": ["latest"]
}

3)运行你的脚本

npx babel-node yourscript.js

或在package.json文件中添加

"scripts": {
  "start": "babel-node index.js"
}

答案 3 :(得分:1)

入门

首先我们将安装babel-cli。

$ npm install --save-dev babel-cli

除了一些预设。

$ npm install --save-dev babel-preset-es2015 babel-preset-stage-2

的package.json:

  "scripts": {
    "start": "babel-node index.js --presets es2015,stage-2"
  }

运行:

$ npm start

使用 nodemon

查看文件更改

我们可以使用nodemon改进我们的npm启动脚本。

$ npm install --save-dev nodemon

然后我们可以更新我们的npm启动脚本。

的package.json:

 "scripts": {
   "start": "nodemon index.js --exec babel-node --presets es2015,stage-2"
  }

运行:

$ npm start 

如果您使用 pm2 ,请按以下步骤操作:

$ pm2 start app.js --interpreter babel-node

答案 4 :(得分:1)

解决这个问题非常简单,import是ES6语法,Node很难支持它,您需要添加 Babel 作为编译器,转到package.json并添加以下

首先添加一个脚本标签以在运行JS代码进行编译时使用babel。

"scripts": {
    "start": "nodemon ./app.js --exec babel-node -e js"
  }

然后将以下内容添加为Babel devDependencies

"devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1"
  }

此后,您还需要配置babel预设文件,因此在根目录中创建 .babelrc 文件并按如下所示定义预设

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

别忘了最后做npm install

答案 5 :(得分:0)

感谢NodeJS enhancement proposal我们有一条前进的道路。您可以使用@standard-things/esm

找到announcement here简单运行

npm i --save @std/esm

今天打包。