Node / BabelJS应用程序中不能使用装饰器

我有一个Node应用程序,它指定了带有转换选项的babel,并在主文件中注册,如下所示:

require('babel').transform('code', { stage: 1 }); require('babel/register')({ ignore: false }); require('../src/index'); 

这是一个很好的工作,允许我在../src/index和所有后续文件中使用ES6,但似乎不允许我使用装饰器,因为它应该声明一级变换。 我得到一个语法错误。 为什么这不支持装饰器的支持? 我试图使用的实际装饰者是:

 @test1 test Class() { constructor() { this.test = 'test'; } } function test1(obj) { obj.test1 = 'test1'; } 

这不是你如何指定选项,首先就像什么也不做。 它编译JavaScript代码,不会对编译的结果产生任何影响。

 require('babel/register')({ ignore: false, stage: 1 }); require('../src/index'); 

一般也ignore: false是一个坏主意,因为一些文件应该被忽略。

更新

如果您使用的是Babel 6,那么您将需要下载babel-plugin-transform-decorators-legacy而不是启用stage: 1

值得注意的是,最新版本的babel(v6)(超过1个月)不支持装饰器,而babeljs团队已经确定他们不认为装饰器是优先解决的问题 –

https://twitter.com/sebmck/status/661501967412301824

正如@jdanyow在其他答案中提到的,你可以在这里跟踪这个问题,但是要小心,如果你select使用Babeljs v6,那么以前发行版中的function目前已经在发行版v6中被破解了。

正如@loganfsmyth在注释中指出的那样,有一个可用的插件, babel-plugin-transform-decorators-legacy,尽pipe它提到了实现方面的差异,但是我不知道它们。