Я пытаюсь динамически переназначить переменную в определенном файле на основе переданных аргументов сборки, но у меня возникают проблемы с пониманием документации плагина и выяснением, где будет место для подключения.
Идеальным сценарием было бы иметь возможность передать имя файла, имя переменной и значение переменной в плагин (для краткости я оставил конструктор для получения этих аргументов), а затем переопределил / переназначил их в данном файле.
т.е. Index.ts будет иметь let myVariable = false;
, и я хотел бы переключить его на true, основываясь на переданных параметрах в webpack.
С помощью приведенного ниже кода я могу использовать синтаксический анализатор для поиска переменной, но я не могу изменить ее. Я пробовал statement.declarations[0].init.raw = "true"
и statement.declarations[0].init.value = true
, но выходной файл index.js по-прежнему имеет исходное значение false.
Я пытаюсь сделать это не в той части процесса веб-пакета, или мне нужно использовать другой хук? Любое руководство о том, как или где я мог бы сделать это было бы очень полезно. Спасибо.
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;