J'ai créé un fichier extern dans un fichier javascript et l'ai spécifié dans le cadre de l'option de ligne de commande Google Closure Compiler (GCC). Je compile avec le mode avancé. GCC prend la fonction dans mon extern et la place dans le code compilé. Je ne sais pas pourquoi ça ferait ça. GCC est supposé reconnaître que la fonction extern est dans un fichier séparé. Lorsque j'exporte l'objet, il renomme l'objet et laisse les noms de fonctions de l'objet seuls MAIS il crée une copie de la fonction extern entière dans le code compilé.Google Closure Compiler importe mes fonctions externes
J'ai essayé de nombreuses variantes (trop nombreuses ici pour les lister) pour voir comment empêcher GCC de le faire mais rien n'a fonctionné.
Mon extern:
var MyCustomResizer = {
"onResize": function (a, b) {
},
"detach": function() {
}
}
J'exporté l'objet comme suit:
window["MyCustomResizer"] = MyCustomResizer;
Mon application en utilisant la fonction "détacher":
MyCustomResizer.detach();
Mes paramètres du compilateur:
java -jar closure-compiler/compiler.jar \
--compilation_level ADVANCED_OPTIMIZATIONS \
--externs scripts/externs/resizer-extern.js \
--js_output_file scripts/release/myapp.js \
--warning_level VERBOSE \
--language_out ECMASCRIPT5 \
--language_in=ECMASCRIPT_2017 \
--js scripts/base.js
Et la sortie compilé généré contient ceci:
ha.detach();
...
var ha = {
onResize: function() {
}, detach: function() {
}
};
Vous n'exportez pas d'externs. C'est inutile. –
Je n'exporte pas d'externs. J'ai même laissé de côté la ligne de la fenêtre de code ["MyCustomResizer"] = MyCustomResizer; mais cela n'a rien fait. En laissant cela de côté, l'appel de fonction a été retiré de mon code. Maintenant c'est inutile. J'ai également suivi le modèle identique que j'utilise pour utiliser jQuery mais cela n'a pas aidé non plus. – AndroidDev