Плагин webpack для замены функции другой
Я пытаюсь создать плагин webpack, который будет анализировать код для определенной функции и заменять его другой функцией, этот плагин также будет представлять новую функцию как глобальную.
class someName {
constructor(local, domain, translationFile, options) {
}
apply(compiler) {
// exposing ngt function as a global
compiler.plugin('make', function(compilation, callback) {
var childCompiler = compilation.createChildCompiler('someNameExpose');
childCompiler.apply(new webpack.DefinePlugin({
ngt: function(singular , plural, quantity) {
return quantity == 1 ? singular : plural;
}
}));
childCompiler.runAsChild(callback);
});
// searching for the getValue function
compiler.parser.plugin(`call getValue`, function someNameHandler(expr) {
// create a function to replace getValue with
let results = 'ngt('+ expr.arguments +')';
const dep = new ConstDependency(results, expr.range);
dep.loc = expr.loc;
this.state.current.addDependency(dep);
return true;
});
}
}
module.exports = someName;
обновить / перефразировать
У меня есть проблема здесь, когда compiler.parser.plugin('call getValue', function someNameHandler(expr) {...}
блок комментируется ngt
Функция существует как глобальная.
когда это не прокомментировано, я получаю сообщение об ошибке, ngt не определено.
прокомментировал я имею в виду /**/
Я нашел обходной путь для этого, но это далеко не идея. сейчас я экспортирую анонимную функцию, которая делает то, что я хочу.
Вы можете увидеть плагин здесь: Github
2 ответа
Вы можете использовать плагин webpack-merge, очень полезно делать именно то, что вы хотите.
Вы можете переопределить метод в зависимости от среды. Допустим, у вас есть метод
function a(){
//original defination
}
Теперь, исходя из окружающей среды, если это производство, вы можете сделать что-то вроде этого
if (environment.production) {
function a(){
//overridden defination
}
}