无法使用解析器挂钩在webpack插件中重新分配变量

时间:2018-11-13 00:19:26

标签: webpack-4 webpack-plugin

我试图根据传入的构建参数在特定文件中动态地重新分配变量,但是我在理解插件文档以及确定将其连接的位置时遇到了麻烦。

理想的方案是能够将文件名,变量名和变量值传递给插件(为简便起见,我省略了构造函数以接受这些参数),然后重写/重新分配在给定的文件中。

即Index.ts应该有let myVariable = false;,我想根据传递给webpack的参数将其翻转为true。

使用下面的代码,我可以使用解析器来找到变量,但似乎无法更改它。我已经尝试过statement.declarations[0].init.raw = "true"statement.declarations[0].init.value = true,但是输出的index.js文件仍然具有原始的假值。

我是要尝试在Webpack流程的错误部分中执行此操作,还是需要使用其他挂钩?关于如何或在何处可以执行此操作的任何指导将非常有帮助。谢谢。

class MyPlugin {
    apply(compiler) {
        compiler.hooks.beforeCompile.
            tap('MyPlugin', ({ normalModuleFactory }) => {

                normalModuleFactory.hooks.parser.
                    for("javascript/auto").
                    tap("MyPlugin", handler);
                normalModuleFactory.hooks.parser.
                    for("javascript/dynamic").
                    tap("MyPlugin", handler);
                normalModuleFactory.hooks.parser.
                    for("javascript/esm").
                    tap("MyPlugin", handler);
        });

        function handler(parser, options) {
            parser.hooks.statement.tap('MyPlugin', (statement) => {
                const module = parser.state.module;
                if (module.resource 
                    && module.resource.endsWith('index.ts')
                    && statement.type === 'VariableDeclaration'
                    && statement.declarations[0].id.name === 'myVariable') {
                    // Do something here??
                }
            });
        }
    }
}

module.exports = MyPlugin;

0 个答案:

没有答案