Aqui estão 2 arquivos:
// main.js
require('./modules');
console.log(name); // prints "foobar"
// module.js
name = "foobar";
Quando não tenho "var", funciona. Mas quando eu tenho:
// module.js
var name = "foobar";
O nome será indefinido em main.js.
Ouvi dizer que variáveis globais são ruins e é melhor você usar "var" antes das referências. Mas é este o caso em que variáveis globais são boas?
javascript
node.js
global-variables
never_had_a_name
fonte
fonte
exports
objeto.global.foo = 'bar'
e acessar emfoo
qualquer lugar que desejar ... mas como eu disse na minha resposta original, isso quase nunca é uma coisa boa.Não consigo encontrar um cenário em que uma global
var
seja a melhor opção, é claro que você pode ter uma, mas dê uma olhada nesses exemplos e poderá encontrar uma maneira melhor de realizar o mesmo:Cenário 1: Coloque as coisas nos arquivos de configuração
Você precisa de algum valor que seja o mesmo no aplicativo, mas ele muda dependendo do ambiente (produção, desenvolvimento ou teste), do tipo de mala direta como exemplo, você precisa:
e
(faça uma configuração semelhante para dev também)
Para decidir qual configuração será carregada, crie um arquivo de configuração principal (isso será usado em todo o aplicativo)
E agora você pode obter dados como este:
Cenário 2: Use um arquivo de constantes
E use desta maneira
Cenário 3: Use uma função auxiliar para obter / definir os dados
Não é um grande fã deste, mas pelo menos você pode acompanhar o uso do 'nome' (citando o exemplo do OP) e colocar as validações em vigor.
E use
Pode haver um caso de uso em que não há outra solução além de ter uma global
var
, mas geralmente você pode compartilhar os dados em seu aplicativo usando um desses cenários, se estiver começando a usar o node.js (como eu estava há algum tempo), tente para organizar a maneira como você lida com os dados por lá, porque eles podem ficar confusos muito rápido.fonte
Se precisarmos compartilhar várias variáveis, use o formato abaixo
Uso
fonte
Salve qualquer variável que queira ser compartilhada como um objeto. Depois, passe-o para o módulo carregado para que ele possa acessar a variável através da referência a objeto.
No outro arquivo ..
fonte
uma variável declarada com ou sem a palavra-chave var foi anexada ao objeto global. Essa é a base para a criação de variáveis globais no Node, declarando variáveis sem a palavra-chave var. Enquanto as variáveis declaradas com a palavra-chave var permanecem locais em um módulo.
consulte este artigo para obter mais informações - https://www.hacksparrow.com/global-variables-in-node-js.html
fonte
Com uma opinião diferente, acho que as
global
variáveis podem ser a melhor opção se você deseja publicar seu códigonpm
, porque você não pode ter certeza de que todos os pacotes estão usando a mesma versão do seu código. Portanto, se você usar um arquivo para exportar umsingleton
objeto, ele causará problemas aqui.Você pode escolher
global
,require.main
ou quaisquer outros objetos que são compartilhados entre arquivos.Por favor, diga-me se existem algumas soluções melhores.
fonte