2016-06-30 54 views
4

即时通讯工作在使用es6和es7代码的Aurelia应用程序,即时尝试使用babel传输代码。我在packages.json文件中的以下Babel transpiling es7类装饰器意外的令牌错误

"scripts": { 
    "babel": "babel --stage 1 -d AureliaWeb/ ../Test/Aurelia/ --extends babelrc", 

我已经安装了以下软件包:

"devDependencies": { 
"babel-core": "^6.10.4", 
"babel-plugin-syntax-decorators": "^6.8.0", 
"babel-plugin-syntax-flow": "^6.8.0", 
"babel-plugin-transform-es2015-modules-amd": "^6.8.0", 
"babel-plugin-transform-es2015-modules-commonjs": "^6.10.3", 
"babel-plugin-transform-es2015-modules-systemjs": "^6.9.0", 
"babel-plugin-transform-flow-strip-types": "^6.8.0", 
"babel-preset-es2015": "^6.9.0", 
"babel-preset-es2015-loose": "^7.0.0", 
"babel-preset-react": "^6.11.1", 
"babel-preset-stage-0": "^6.5.0", 
"babel-preset-stage-1": "^6.5.0", 
"babel-preset-stage-2": "^6.11.0", 
"babel-preset-stage-3": "^6.11.0", 
"babel-register": "^6.9.0", 
"chai": "^3.5.0" 
}, 
"dependencies": { 
"babel-plugin-transform-class-properties": "^6.10.2", 
"babel-plugin-transform-decorators-legacy": "^1.3.4", 
"babel-preset-es2015-loose": "^7.0.0", 
"core-js": "^2.4.0", 
"lodash": "^4.13.1" 
} 

我试着去transpile ES7代码看起来像:

import {inject, noView} from 'aurelia-framework'; 
import {HttpClient} from 'aurelia-http-client'; 

@noView() <-- THIS IS CAUSING THE ERROR!! 
@inject(HttpClient) 
export class CompanyDataManager { 

即时得到的错误语法错误意外的令牌arount类装饰器@noView。我已经检查了第1阶段预设的,我知道这个类的装饰已被删除http://babeljs.io/docs/plugins/preset-stage-1/

由于这一点,我已经在传统的装饰增加了“巴别塔 - 插件 - 转换 - 装饰遗留在这里找到” https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy

所以我的.babelrc(它位于我的项目的根目录)看起来像这样:

{ 
    "presets": [ "es2015-loose", "stage-1" ], 
    "plugins": [ 
    "syntax-decorators", 
    "syntax-flow", 
    "babel-plugin-transform-decorators-legacy", 
    "transform-class-properties", 
    "transform-flow-strip-types" 
    ] 
} 

但是,我仍然没有找到喜悦!问题是

  1. 我如何确认我的babelrc文件正在拾起时,即时执行在npm巴贝尔脚本?我尝试添加--extend babelrc试图强制它,但我不知道这是否正确。
  2. 我还试图在巴别命令等,从而指定一个插件:

    “巴别--plugins巴贝尔-插件 - 转换 - 装饰遗留--stage 1 -d AureliaWeb/../Test/Aurelia /“

仍然没有运气,任何帮助将不胜感激。

更新1

与.bablerc文件乱搞后,我想我可能已经把它放在错误的位置。我的结构如下(它是一个mvc应用程序)。

  • Test.UnitTest(项目)< - 我从这里运行巴贝尔脚本
    • AureliaWeb < - 结束trandpiled位置
  • 测试(项目)
    • Aurelia < - 包含实际Aurelia代码

在已经移动的.bablerc文件到测试> Aurelia路上,我开始收到以下错误

未知插件“变换装饰遗”的“C规定:\代码的\ src \测试\奥里利亚\ 。babelrc”设置为0,试图解决相对于‘C:\代码的\ src \测试\奥里利亚’

我试图安装包在两个项目变换装饰遗留,看它是否有什么差别

更新2

我现在可以证实,这是事实问题,似乎通天文件需要被放置在源文件夹,而不是目的地或从巴贝尔已经执行的位置。

回答

0

我已经回答了我自己的问题,细节在主帖子中。

巴贝尔文件需要被放置在源文件夹中,而不是目的地或巴贝尔执行的位置。

2

我相信你只需要删除括号:

@noView 
@inject(HttpClient) 
export class CompanyDataManager { 

见,例如,point 2 under "Best Effort"

class Example { 
    @dec 
    static prop = i++; 
} 

______

注:当你在声明通天插件您.babelrc(或package.json),你可以删除前缀babel-plugin-

[ 
    "syntax-decorators", 
    "syntax-flow", 
    "transform-decorators-legacy", 
    "transform-class-properties", 
    "transform-flow-strip-types" 
] 

______

我怎么能确认我的babelrc文件被拿起时,即时通讯执行在它被调用为任何一个.babelrcpackage.json"babel"财产目录中的巴别塔脚本

巴贝尔看起来。只要你有其中一个,并且在同一个目录下执行Babel,Babel就会找到它。

+0

感谢您的回应,我试图删除括号,但即时通讯仍然得到相同的错误。 – FishFingers

+1

你需要'syntax-decorators'和'decorators-legacy'吗?我想你只需要第二个。 –

+0

我已经删除了语法装饰器,但即时通讯仍然得到相同的结果。 – FishFingers