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 ne sera pas défini dans main.js.
J'ai entendu dire que les variables globales sont mauvaises et il vaut mieux utiliser "var" avant les références. Mais est-ce un cas où les variables globales sont bonnes?
javascript
node.js
global-variables
never_had_a_name
la source
la source
exports
objet.global.foo = 'bar'
et accéder àfoo
n'importe quel endroit de votre choix ... mais comme je l'ai dit dans ma réponse initiale, ce n'est presque jamais une bonne chose.Je ne parviens pas à trouver un scénario où un global
var
est la meilleure option, bien sûr vous pouvez en avoir un, mais jetez un œil à ces exemples et vous trouverez peut-être un meilleur moyen d'accomplir la même chose:Scénario 1: mettre les choses dans les fichiers de configuration
Vous avez besoin d'une valeur identique dans toute l'application, mais cela change en fonction de l'environnement (production, développement ou test), le type de courrier par exemple, dont vous auriez besoin:
et
(faire une configuration similaire pour les développeurs aussi)
Pour décider quelle configuration sera chargée, créez un fichier de configuration principal (il sera utilisé dans toute l'application)
Et maintenant, vous pouvez obtenir les données comme ceci:
Scénario 2: utiliser un fichier de constantes
Et utilisez-le de cette façon
Scénario 3: utiliser une fonction d'assistance pour obtenir / définir les données
Pas un grand fan de celui-ci, mais au moins vous pouvez suivre l'utilisation du 'nom' (en citant l'exemple de l'OP) et mettre en place des validations.
Et utilisez-le
Il pourrait y avoir un cas d'utilisation où il n'y a pas d'autre solution que d'avoir un global
var
, mais généralement vous pouvez partager les données dans votre application en utilisant l'un de ces scénarios, si vous commencez à utiliser node.js (comme je l'étais il y a quelque temps) essayez pour organiser la façon dont vous gérez les données là-bas, car cela peut devenir très rapidement compliqué.la source
Si nous devons partager plusieurs variables, utilisez le format ci-dessous
Usage
la source
Enregistrez toute variable à partager comme un seul objet. Puis passez-le au module chargé pour qu'il puisse accéder à la variable via la référence d'objet.
Sur l'autre dossier ..
la source
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 à un module.
voir cet article pour plus de compréhension - https://www.hacksparrow.com/global-variables-in-node-js.html
la source
Avec un avis différent, je pense que les
global
variables pourraient être le meilleur choix si vous allez publier votre codenpm
, car vous ne pouvez pas être sûr que tous les packages utilisent la même version de votre code. Donc, si vous utilisez un fichier pour exporter unsingleton
objet, cela causera des problèmes ici.Vous pouvez choisir
global
,require.main
ou tout autre objet qui est partagé entre les fichiers.Veuillez me dire s'il existe de meilleures solutions.
la source