Voici 2 fichiers:
// main.js require('./modules'); console.log(name); // prints "foobar" // module.js name = "foobar";
Quand je n'ai pas "var", ça marche. Mais quand j'ai:
// module.js var name = "foobar";
Le nom sera indéfini dans main.js.
J'ai entendu dire que les variables globales sont mauvaises et que vous préférez utiliser "var" avant les références. Mais est-ce un cas où les variables globales sont bonnes?
Les variables globales ne sont presque jamais une bonne chose (peut-être une exception ou deux là-bas …). Dans ce cas, il semble que vous souhaitiez vraiment exporter votre variable "nom". Par exemple,
// module.js var name = "foobar"; // export it exports.name = name;
Ensuite, dans main.js …
//main.js // get a reference to your required module var myModule = require('./module'); // name is a member of myModule due to the export above var name = myModule.name;
Une variable déclarée avec ou sans le mot-clé var est attachée à l'objet global. C'est la base pour créer des variables globales dans Node en déclarant des variables sans le mot-clé var. Alors que les variables déclarées avec le mot-clé var restent locales dans un module.
Voir cet article pour une meilleure compréhension – https://www.hacksparrow.com/global-variables-in-node-js.html
Pour partager la variable entre le module, vous pouvez utiliser la fonction pour obtenir la valeur de la variable entre le principal et les modules.
//myModule.js var mainFunction = null; //You can also put function reference in a Object or Array function functionProxy(func){ mainFunction = func; //Save the function reference } // --- Usage --- // setTimeout(function(){ // console.log(mainFunction('myString')); // console.log(mainFunction('myNumber')); // }, 3000); module.exports = { functionProxy:functionProxy }
.
//main.js var myModule = require('./myModule.js'); var myString = "heyy"; var myNumber = 12345; function internalVariable(select){ if(select=='myString') return myString; else if(select=='myNumber') return myNumber; else return null; } myModule.functionProxy(internalVariable); // --- If you like to be able to set the variable too --- // function internalVariable(select, set){ // if(select=='myString'){ // if(set!=undefined) myString = set; // else return myString; // } // else if(select=='myNumber'){ // if(set!=undefined) myNumber = set; // else return myNumber; // } // else return null; // }
Vous pouvez toujours obtenir la valeur de main.js
même si la valeur a été modifiée.