Eu perguntei aqui: node.js requer herança?
e me disseram que eu posso definir variáveis para o escopo global deixando de fora o var.
Isso não funciona para mim.
ou seja:
_ = require('underscore');
Não disponibiliza o _ nos arquivos necessários. Eu posso definir com expresso app.set
e tê-lo disponível em outro lugar embora.
Alguém pode confirmar que isso deve funcionar? Obrigado.
javascript
node.js
express
atormentar
fonte
fonte
exports
. Está muito, muito melhor.Respostas:
Você pode usar
global
assim:fonte
window
é o objeto global.document
é uma propriedade dewindow
.No nó, você pode definir variáveis globais por meio do objeto "global" ou "GLOBAL":
ou mais útil ...
Na origem do nó, você pode ver que esses são alias entre si:
No código acima, "this" é o contexto global. Com o sistema de módulo commonJS (que o nó usa), o objeto "this" dentro de um módulo (ou seja, "seu código") NÃO é o contexto global. Para provar isso, veja abaixo onde eu vomito o objeto "this" e o objeto "GLOBAL" gigante.
** Nota: em relação à configuração "GLOBAL._", em geral você deve fazer
var _ = require('underscore');
. Sim, você faz isso em todos os arquivos que usam sublinhado, assim como em Javaimport com.foo.bar;
. Isso torna mais fácil descobrir o que seu código está fazendo porque as ligações entre os arquivos são 'explícitas'. Um pouco irritante, mas uma coisa boa. .... Essa é a pregação.Há uma exceção a todas as regras. Eu tive exatamente exatamente UMA instância em que precisei definir "GLOBAL._". Eu estava criando um sistema para definir arquivos "config" que eram basicamente JSON, mas foram "escritos em JS" para permitir um pouco mais de flexibilidade. Esses arquivos de configuração não tinham instruções 'exigem', mas eu queria que eles tivessem acesso ao sublinhado (o sistema INTIRE era baseado em modelos de sublinhado e sublinhado); portanto, antes de avaliar a "configuração", eu definiria "GLOBAL._". Então, sim, para todas as regras, há uma exceção em algum lugar. Mas é melhor você ter um bom motivo, e não apenas "eu me canso de digitar 'exigir', então quero romper com a convenção".
fonte
.js
arquivo comum e ligarrequire
antes de exportar as configurações?As outras soluções que usam a palavra-chave GLOBAL são um pesadelo para manter / legibilidade (+ poluição do namespace e bugs) quando o projeto fica maior. Eu já vi esse erro muitas vezes e tive o trabalho de corrigi-lo.
Use um arquivo JS e use as exportações do módulo.
Exemplo:
globals.js
Então, se você quiser usá-los, use require.
fonte
globals.domain
?Que tal um espaço para nome global como
global.MYAPI = {}
Editar após o comentário de camilo-martin : Todos os outros pôsteres falam sobre o mau padrão envolvido. Portanto, deixando essa discussão de lado, a melhor maneira de definir uma variável globalmente (a pergunta do OP) é através de espaços para nome.
@ dica: http://thanpol.as/javascript/development-using-namespaces
fonte
require
serve! Não há problema em usar espaços para nome, mas não use todosglobal.foo = global.foo || {}
os arquivos ou algo assim. Exija o arquivo que define o espaço para nome. Faça isso pelas crianças.Você pode apenas usar o objeto global.
fonte
Concordo que o uso do espaço de nomes global / GLOBAL para definir algo global é uma prática ruim e não o utiliza em teoria ( em teoria, é a palavra operativa). No entanto (sim, o dispositivo) eu o uso para definir classes de erro personalizadas:
Sim, tabu aqui, mas se o seu site / projeto usar erros personalizados em todo o local, você basicamente precisará defini-lo em qualquer lugar ou pelo menos em algum lugar para:
Definir meus erros personalizados no namespace global me poupa o trabalho de exigir a minha biblioteca de erros do cliente. Imagem gerando um erro personalizado em que esse erro personalizado é indefinido.
Também, se isso estiver errado, entre em contato, pois eu comecei a fazer isso recentemente
fonte