Aquí hay 2 archivos:
// main.js
require('./modules');
console.log(name); // prints "foobar"
// module.js
name = "foobar";
Cuando no tengo "var" funciona. Pero cuando tengo:
// module.js
var name = "foobar";
el nombre estará indefinido en main.js.
He oído que las variables globales son malas y es mejor que uses "var" antes de las referencias. ¿Pero es este un caso donde las variables globales son buenas?
javascript
node.js
global-variables
never_had_a_name
fuente
fuente
exports
objeto.global.foo = 'bar'
y luego acceder afoo
cualquier lugar que desee ... pero como dije en mi respuesta original, eso casi nunca es algo bueno.No puedo encontrar un escenario en el que un global
var
sea la mejor opción, por supuesto que puede tener uno, pero eche un vistazo a estos ejemplos y puede encontrar una mejor manera de lograr lo mismo:Escenario 1: poner las cosas en archivos de configuración
Necesita un valor que sea el mismo en toda la aplicación, pero cambia según el entorno (producción, desarrollo o prueba), el tipo de correo como ejemplo, necesitaría:
y
(hacer una configuración similar para dev también)
Para decidir qué configuración se cargará, cree un archivo de configuración principal (se usará en toda la aplicación)
Y ahora puede obtener los datos de esta manera:
Escenario 2: usar un archivo de constantes
Y úsalo de esta manera
Escenario 3: usar una función auxiliar para obtener / establecer los datos
No soy un gran admirador de este, pero al menos puedes rastrear el uso del 'nombre' (citando el ejemplo del OP) y poner las validaciones en su lugar.
Y úsalo
Podría haber un caso de uso cuando no hay otra solución que tener una global
var
, pero generalmente puede compartir los datos en su aplicación usando uno de estos escenarios, si está comenzando a usar node.js (como lo hice hace algún tiempo) intente para organizar la forma en que maneja los datos allí porque puede volverse desordenado realmente rápido.fuente
Si necesitamos compartir múltiples variables, use el siguiente formato
Uso
fuente
Guarde cualquier variable que desee compartir como un solo objeto. Luego páselo al módulo cargado para que pueda acceder a la variable a través de la referencia de objeto.
En el otro archivo ...
fuente
una variable declarada con o sin la palabra clave var se adjuntó al objeto global. Esta es la base para crear variables globales en Node declarando variables sin la palabra clave var. Mientras que las variables declaradas con la palabra clave var permanecen locales para un módulo.
consulte este artículo para obtener más información: https://www.hacksparrow.com/global-variables-in-node-js.html
fuente
Con una opinión diferente, creo que las
global
variables podrían ser la mejor opción si va a publicar su códigonpm
, porque no puede estar seguro de que todos los paquetes estén usando la misma versión de su código. Entonces, si usa un archivo para exportar unsingleton
objeto, aquí causará problemas.Puede elegir
global
,require.main
o cualquier otro objeto que se comparta entre archivos.Por favor, dime si hay algunas mejores soluciones.
fuente