Nodejs5和babel中的“意外令牌导入”?
在js文件中,我使用import来代替require
import co from 'co';
并试图由nodejs直接运行它,因为它表示导入是“运送function”和支持没有任何运行时标志( 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
仍然有相同的错误,意外的令牌导入?
我怎么能摆脱它?
从babel 6发行说明:
由于Babel专注于成为JavaScript工具的平台,而不是ES2015的编译器,所以我们决定让所有的插件都可以select使用。 这意味着当您安装Babel时,默认情况下不会再传输您的ES2015代码。
在我的设置中,我安装了es2015预设
npm install --save-dev babel-preset-es2015
或与纱线
yarn add babel-preset-es2015 --dev
并启用了我的.babelrc中的预设
{ "presets": ["es2015"] }
在模块实现之前,你可以使用Babel“transpiler”来运行你的代码:
npm install --save babel-cli babel-preset-node6
接着
./node_modules/babel-cli/bin/babel-node.js --presets node6 ./your_script.js
如果你不想input--presets node6
你可以通过以下方法保存.babelrc文件:
{ "presets": [ "node6" ] }
请参阅https://www.npmjs.com/package/babel-preset-node6和https://babeljs.io/docs/usage/cli/
- 安装软件包:
babel-core
,babel-polyfill
babel-preset-es2015
,babel-preset-es2015
- 用内容创build
.babelrc
:{ "presets": ["es2015"] }
- 不要把
import
语句放在主入口文件中,使用另一个文件,比如:app.js
,你的主入口文件应该是babel-core/register
和babel-polyfill
,使babel在第一个地方独立工作。 那么你可以在需要app.js
地方import
语句。
例:
index.js
require('babel-core/register'); require('babel-polyfill'); require('./app');
app.js
import co from 'co';
它应该与node index.js
。
这可能是你正在运行未编译的文件。 让我们开始干净!
在你的工作目录中创build:
- 两个文件夹。 一个用于预编译的es2015代码。 另一个是babel的输出。 我们将它们分别命名为“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"]}
“presets”{"presets": ["latest"]}
-
最后,在你的src / index.js文件中写testing代码。 在你的情况下:
import co from 'co'.
通过您的控制台:
- 安装你的软件包:
npm install
- 使用-d(aka –out-dir)标志将您的源目录传输到您的输出目录,这已经在我们的package.json中指定了:
npm run transpile-es2015
- 从输出目录运行你的代码!
node lib/index.js
如果您使用预设为react-native,则接受导入
npm i babel-preset-react-native --save-dev
并把它放在你的.babelrc文件中
{ "presets": ["react-native"] }
在你的项目根目录下
在您的应用程序中,您必须声明您的require()
模块,而不是使用“import”关键字:
const app = require("example_dependency");
然后,创build一个.babelrc文件:
{ "presets": [ ["es2015", { "modules": false }] ] }
然后,在你的gulp文件中,一定要声明你的require()
模块:
var gulp = require("gulp");