0

概述

我编写了一个 babel 插件,它为类添加了一个自定义构造函数。我还使用@babel/plugin-proposal-class-properties插件来支持类属性。我的.babelrc样子是这样的:

{
  "plugins": [
    "./plugins/my-plugin.js",
    "@babel/plugin-proposal-class-properties",
  ]
}

我正在使用babel-core@7.2.2, 和@babel/plugin-proposal-class-properties@7.2.3.

问题

类属性插件覆盖了我生成的构造函数。例如,给定这个测试文件:

// Source
class Test extends Base {
    // someProp = 'yay';
}

如果我在没有类属性插件的情况下运行,则会插入我的构造函数:

// Transpiled (no class props)
class Test extends Base {
    constructor() {
        super(...arguments);

        console.log('my special custom code');
    }
}

但是如果我取消注释someProp并启用类属性插件,我的自定义代码将被覆盖:

// Transpiled (with class props)
class Test extends Base {
    constructor(...args) {
        super(...args);

        _defineProperty(this, "someProp", 'yay');
    }
}

我列出插件的顺序似乎并不重要。这是预期的,有没有办法解决它,或者这是一个错误?

我不认为我的插件的实现很重要 - 但如果确实如此,我可以添加更多细节。

任何帮助表示赞赏。谢谢!

4

1 回答 1

0

我最终在 Babel slack 社区寻求帮助,他们能够帮助我解决这个问题。

问题是我在实现中使用了不同的访问者 - 我为ClassDeclarationand指定ClassMethod了访问者,但plugin-proposal-class-properties实现中的访问者是 on Class。当我将代码更改为使用 时Class,并确保我的代码首先运行时,这些属性已按预期添加到我的自定义构造函数中。

于 2019-02-11T20:35:53.560 回答