evitando ../../../../../../ ..
Nem tudo em um aplicativo pertence adequadamente ao npm público e a sobrecarga de configurar um npm privado ou repositório git ainda é bastante grande em muitos casos. Aqui estão algumas abordagens para evitar o
../../../../../../../
problema de caminhos relativos.
node_modules
Às vezes, as pessoas se opõem a colocar módulos específicos de aplicativos em node_modules porque não é óbvio como fazer check-in em seus módulos internos sem também fazer check-in de módulos de terceiros no npm.
A resposta é bem simples! Se você possui um .gitignore
arquivo que ignora node_modules
:
node_modules
Você pode apenas adicionar uma exceção !
para cada um de seus módulos de aplicativos internos:
node_modules/*
!node_modules/foo
!node_modules/bar
Observe que você não pode cancelar o cancelamento de um subdiretório, se o pai já estiver ignorado. Portanto, em vez de ignorar node_modules
, você deve ignorar todos os diretórios internos node_modules
com o
node_modules/*
truque e adicionar suas exceções.
Agora, em qualquer lugar do seu aplicativo, você poderá require('foo')
ou require('bar')
não ter um caminho relativo muito grande e frágil.
Se você possui muitos módulos e deseja mantê-los mais separados dos módulos de terceiros instalados pelo npm, basta colocá-los em um diretório node_modules
, como node_modules/app
:
node_modules/app/foo
node_modules/app/bar
Agora você poderá require('app/foo')
ou require('app/bar')
de qualquer lugar no seu aplicativo.
No seu .gitignore
, basta adicionar uma exceção para node_modules/app
:
node_modules/*
!node_modules/app
Se seu aplicativo tiver transformadas configuradas em package.json, será necessário criar um package.json separado com seu próprio campo de transformação no diretório do componente node_modules/foo
ou node_modules/app/foo
porque as transformações não se aplicam aos limites do módulo. Isso tornará seus módulos mais robustos contra alterações de configuração em seu aplicativo e será mais fácil reutilizar independentemente os pacotes fora do aplicativo.
ligação simbólica
Outro truque útil se você estiver trabalhando em um aplicativo em que é possível criar links simbólicos e não precisar dar suporte ao Windows é vincular uma pasta lib/
ou uma . Na raiz do projeto, faça:app/
node_modules
ln -s ../lib node_modules/app
e agora, em qualquer lugar do seu projeto, você poderá solicitar arquivos lib/
fazendo o require('app/foo.js')
get lib/foo.js
.
caminhos personalizados
Você pode ver alguns lugares falando sobre o uso da $NODE_PATH
variável de ambiente ou opts.paths
adicionar diretórios para node e browserify para procurar módulos.
Diferentemente da maioria das outras plataformas, o uso de uma matriz de diretórios de caminho no estilo shell $NODE_PATH
não é tão favorável no nó, em comparação com o uso efetivo do node_modules
diretório.
Isso ocorre porque seu aplicativo está mais fortemente acoplado a uma configuração do ambiente de tempo de execução, para que haja mais partes móveis e seu aplicativo funcionará apenas quando seu ambiente estiver configurado corretamente.
node e browserify suportam, mas desencorajam o uso de
$NODE_PATH
.