我试图根据传入的构建参数在特定文件中动态地重新分配变量,但是我在理解插件文档以及确定将其连接的位置时遇到了麻烦。
理想的方案是能够将文件名,变量名和变量值传递给插件(为简便起见,我省略了构造函数以接受这些参数),然后重写/重新分配在给定的文件中。
即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;