Ich versuche ein Webpack-Plugin zu erstellen, das den Code für eine bestimmte Funktion analysiert und durch eine andere Funktion ersetzt. Dieses Plugin wird auch die neue Funktion als global verfügbar machen.webpack plugin, um eine Funktion durch eine andere zu ersetzen
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;
Aktualisierung/umformulieren
Ich habe ein Problem hier, wenn compiler.parser.plugin('call getValue', function someNameHandler(expr) {...}
Block die ngt
Funktion kommentiert wird existieren als global.
wenn es nicht kommentiert, bekomme ich einen Fehler, NGT ist undefiniert.
kommentiert i /**/
bedeuten
ich eine Abhilfe für das gefunden, aber seine weit dann Idee. Genau jetzt, was ich tue, ich exportiere eine anonyme Funktion, die tut, was ich will.
können Sie das Plugin hier sehen: Github
Hallo tun konnte, ist es möglich, die folgenden Punkte zu klären? Wie ist das 'reactjs'-Tag relevant? Ist es Webpack 1 oder 2? (könnte für einen Experten offensichtlich sein, aber besser es explizit machen) Können Sie die letzten 2 Sätze mit mehr Details umformulieren? (Entschuldigung, vielleicht bin ich es, aber ich habe Probleme zu verstehen, was das Problem ist) –
@Hugues Moreau es hat keine direkte Beziehung zu reactjs, aber es wird für reactjs, webpack 1. verwendet und ich habe die Frage mit weiteren Details aktualisiert. –
Warum schreibe/benutze ich kein babel Plugin? es ist viel einfacher und babel ist schließlich ein transpiler. – Bamieh