对象休息扩展与 babel-寄存器不起作用


// 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:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corelibtransformationfileindex.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:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibparserlocati
on.js:22:13)
    at Parser.pp.unexpected (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibparseru
til.js:91:8)
    at Parser.pp.parseIdentifier (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibpar
serexpression.js:1009:10)
    at Parser.pp.parsePropertyName (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibp
arserexpression.js:831:135)
    at Parser.pp.parseObj (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibparserexp
ression.js:747:12)
    at Parser.pp.parseExprAtom (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibparse
rexpression.js:479:19)
    at Parser.pp.parseExprSubscripts (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlib
parserexpression.js:265:19)
    at Parser.pp.parseMaybeUnary (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibpar
serexpression.js:245:19)
    at Parser.pp.parseExprOps (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonlibparser
expression.js:176:19)
    at Parser.pp.parseMaybeConditional (C:workspacegitLEGOactivity-legonode_modulesbabel-registernode_modulesbabel-corenode_modulesbabylonl

倍尔 版本 6.2.0 (巴别核心 6.2.1(节点版本 4.0.0(64 位(操作系统版本:窗口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我不确定设置此设置的推荐方法是什么。

结论

两种方式让我使用 ...展开对象语法和错误"意外令牌"消失。

我还不确定哪种是推荐的方法,但目前我更喜欢第二种,因为它更容易处理。

最新更新