考虑:
// runMain.js
'use strict';
require('babel-register');
require('./run.js');
// run.js
let o = {id: 1};
let o2 = {...o};
console.log(o === o2);
我已经这样做了:
npm install babel-preset-es2015
npm install babel-plugin-transform-object-rest-spread
和
vi ~/.babelrc
:
{
"presets": ["es2015"],
"plugins": ["transform-object-rest-spread","syntax-object-rest-spread"]
}
但是当
node runMain.js
:时仍然不起作用
C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\lib\transformation\file\index.js:548
throw err;
^
SyntaxError: C:/workspace/git/LEGO/activity-lego/units/2015weather/run.js: Unexpected token (18:10)
[0m 16 | [90m// run.js[39m
17 | let o [1m=[22m [32m{[39mid[1m:[22m [35m1[39m[32m}[39m[1m;[22m
> 18 | let o2 [1m=[22m [32m{[39m[1m...[22mo[32m}[39m[1m;[22m
| ^
19 | console[1m.[22mlog[94m[1m([22m[39mo [1m===[22m o2[94m[1m)[22m[39m[1m;[22m[0m
at Parser.pp.raise (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\parser\locati
on.js:22:13)
at Parser.pp.unexpected (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\parser\u
til.js:91:8)
at Parser.pp.parseIdentifier (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\par
ser\expression.js:1009:10)
at Parser.pp.parsePropertyName (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\p
arser\expression.js:831:135)
at Parser.pp.parseObj (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\parser\exp
ression.js:747:12)
at Parser.pp.parseExprAtom (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\parse
r\expression.js:479:19)
at Parser.pp.parseExprSubscripts (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib
\parser\expression.js:265:19)
at Parser.pp.parseMaybeUnary (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\par
ser\expression.js:245:19)
at Parser.pp.parseExprOps (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\lib\parser
\expression.js:176:19)
at Parser.pp.parseMaybeConditional (C:\workspace\git\LEGO\activity-lego\node_modules\babel-register\node_modules\babel-core\node_modules\babylon\l
Babel 版本 6.2.0(babel-core 6.2.1)
Node.js 版本 4.0.0(64 位)
操作系统版本:Windows 7
因为这个问题还没有得到解答,但在谷歌上评价很高,我刚刚在没有 babel-register 的情况下在我的 react 应用程序中解决了同样的问题(!),我在这里发布我的答案,因为也许它对其他人有用谁最终来到这里:
解决方案1
基于 https://github.com/babel/babel-loader/issues/170
首次安装:
npm install --save-dev babel-plugin-transform-es2015-destructuring
npm install --save-dev babel-plugin-transform-object-rest-spread
第二次编辑.babelrc:
{
"presets": ["react", "es2015"],
"plugins": ["transform-es2015-destructuring", "transform-object-rest-spread"]
}
解决方案2
基于 http://stefan.magnuson.co/articles/frontend/using-es7-spread-operator-with-webpack/
首次安装:
npm install --save babel-preset-stage-2
第二次编辑.babelrc:
{
"presets" : ["es2015", "react", "stage-2"]
}
在提供的链接中,预设是在 webpack.config.js 中设置的,我不确定设置此设置的推荐方法是什么。
结论
这两种方法都让我使用...传播对象语法,并且错误“意外的标记”消失了。
我还不确定哪种方法是推荐的,但目前我更喜欢第二种,因为它更容易处理。