防止babel类属性插件覆盖我生成的构造函数

时间:2019-01-07 06:07:40

标签: babel babel-plugin

概述

我写了一个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');
    }
}

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

我认为插件的实现并不重要-但是,如果有的话,我可以添加更多细节。

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

1 个答案:

答案 0 :(得分:0)

我最终在Babel闲暇社区寻求帮助,他们能够帮助我解决此问题。

问题是我在实现中使用了其他访问者-我为ClassDeclarationClassMethod指定了访问者,但是在plugin-proposal-class-properties实现中的访问者位于{{1 }}。当我更改代码以从Class开始工作并确保我的代码先运行时,这些属性已按预期添加到我的自定义构造函数中。