无法在 Node/BabelJS 应用程序中使用装饰器

Cannot use decorators in Node/BabelJS application

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

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

允许我在 ../src/index 和所有后续文件中使用 ES6,但似乎不允许我使用装饰器,因为它应该通过声明 1 级转换来使用。我得到的是语法错误。为什么这不启用装饰器支持?我尝试使用的实际装饰器是:

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

function test1(obj) {
    obj.test1 = 'test1';
}

这不是您指定选项的方式,首先喜欢什么都不做。它编译 JavaScript 代码 code 并且不对编译结果执行任何操作。

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 在其他答案中提到的,您可以跟踪该问题 here 但请注意,如果您选择使用 Babeljs v6,则之前版本的功能在目前已发布的 v6 中已损坏.

正如@loganfsmyth 在评论中指出的那样,有一个可用的插件 babel-plugin-transform-decorators-legacy 虽然它确实提到在实现方面存在差异,但我不知道它们。