Comme mentionné ci-dessus, il y a des problèmes avec l'utilisation de la portée la plus élevée dans votre fichier de script. Voici un autre problème: le fichier de script peut être exécuté à partir d'un contexte qui n'est pas le contexte global dans un environnement d'exécution.
Il a été proposé d'assigner window
directement le global . Mais cela dépend également de l' exécution et ne fonctionne pas dans Node, etc. Cela montre que la gestion des variables globales portables nécessite une attention particulière et des efforts supplémentaires. Peut-être qu'ils le corrigeront dans les futures versions d'ECMS!
Pour l'instant, je recommanderais quelque chose comme celui-ci pour prendre en charge une gestion globale appropriée pour tous les environnements d'exécution:
var exportGlobal = function(name, object) {
if (typeof(global) !== "undefined") {
global[name] = object;
}
else if (typeof(window) !== "undefined") {
window[name] = object;
}
else {
throw new Error("Unkown run-time environment. Currently only browsers and Node.js are supported.");
}
};
exportGlobal("exportGlobal", exportGlobal);
exportGlobal("someothernamespace", {});
C'est un peu plus typé, mais cela rend votre gestion globale des variables pérenne.
Avis de non-responsabilité: Une partie de cette idée m'est venue en regardant les versions précédentes de stacktrace.js .
Je pense que l'on peut également utiliser Webpack ou d'autres outils pour obtenir une détection plus fiable et moins piratée de l'environnement d'exécution.