如何使用带有电子预编译的装饰器?

时间:2017-11-06 08:49:07

标签: reactjs webpack ecmascript-6 electron decorator

我在电子,反应,redux项目中尝试使用装饰器时遇到了一个令人讨厌的语法错误。

Failed to compile B:/Projekte/sketches/electron-react-get-
started/app/pages/Layout.js: B:/Projekte/sketches/electron-react-get-
started/app/pages/Layout.js: Unexpected token (7:0)
SyntaxError: B:/Projekte/sketches/electron-react-get-
started/app/pages/Layout.js: Unexpected token (7:0)
   5 | import {fetchUsers} from "../actions/userActions";
   6 | 
>  7 | @connect((store) => {
     | ^
   8 |     return {
   9 |         users: store.users
  10 |     }
    at Parser.pp$5.raise (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:4454:13)
    at Parser.pp.unexpected (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:1761:8)
    at Parser.pp$1.parseDecorator (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:1939:10)
   at Parser.pp$1.parseDecorators (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:1924:26)
   at Parser.pp$1.parseStatement (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:1818:10)
    at Parser.parseStatement (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:5910:22)
    at Parser.pp$1.parseBlockBody (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:2268:21)
    at Parser.pp$1.parseTopLevel (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:1778:8)
    at Parser.parse (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:1673:17)
    at parse (B:\Projekte\sketches\electron-react-get-
started\node_modules\babylon\lib\index.js:7305:37)

正如我在问题中所述,我通过"电子预建 - 编译"运行编译的东西。包。到目前为止,它很方便,工作正常。

此软件包的npm页面说它的编译是由电子编译"授权的。 电子编译适用于JS ES6 / ES7(通过Babel),如其所述 github page,是什么让我想知道为什么我会遇到这个" decorator"问题,因为ES6或至少ES7附带此功能。 参见编辑

有关如何解决此错误的任何建议? Electron-prebuilt-compile不允许我配置webpack.config。 也许我必须自己设置webpack?如果我这样做,如何将它与电子结合?

修改
正如他在回答中所说:ES6并不包括装饰者,但是" babel-plugin-transform-decorators-legacy"确实

1 个答案:

答案 0 :(得分:0)

' ES7'这是一个含糊不清且技术上不正确的术语,因为它通俗地提到了ES6中没有包含的提案(目前作为ES.next),但也提到了ES2016。

包裹说明refers to ES2016。装饰器不是现有标准的一部分,而是通过a plugin在Babel中支持。

The package说明它尊重用户.babelrc文件,因此它应在transform-decorators部分中包含transform-decorators-legacypresets,并且应安装相应的Babel插件