evitando ../../../../../../ ..
Non tutto in un'applicazione appartiene correttamente al npm pubblico e il sovraccarico di impostare un npm privato o un repository git è ancora piuttosto grande in molti casi. Ecco alcuni approcci per evitare il
../../../../../../../
problema dei percorsi relativi.
node_modules
Le persone a volte si oppongono all'inserimento di moduli specifici dell'applicazione in node_modules perché non è ovvio come effettuare il check-in dei moduli interni senza controllare anche i moduli di terze parti da npm.
La risposta è abbastanza semplice! Se hai un .gitignore
file che ignora node_modules
:
node_modules
Puoi semplicemente aggiungere un'eccezione con !
per ciascuno dei tuoi moduli applicativi interni:
node_modules/*
!node_modules/foo
!node_modules/bar
Si noti che non è possibile annullare l'annullamento di una sottodirectory, se il genitore è già ignorato. Quindi, invece di ignorare node_modules
, devi ignorare ogni directory all'interno node_modules
con il
node_modules/*
trucco e quindi puoi aggiungere le tue eccezioni.
Ora, ovunque nella tua applicazione, sarai in grado require('foo')
o require('bar')
meno di avere un percorso relativo molto grande e fragile.
Se hai molti moduli e vuoi tenerli più separati dai moduli di terze parti installati da npm, puoi semplicemente metterli tutti in una directory node_modules
come node_modules/app
:
node_modules/app/foo
node_modules/app/bar
Ora sarai in grado require('app/foo')
o require('app/bar')
da qualsiasi parte dell'applicazione.
Nel tuo .gitignore
, aggiungi solo un'eccezione per node_modules/app
:
node_modules/*
!node_modules/app
Se la tua applicazione aveva le trasformazioni configurate in package.json, dovrai creare un package.json separato con il suo campo di trasformazione nella directory del tuo componente node_modules/foo
o node_modules/app/foo
perché le trasformazioni non si applicano oltre i confini del modulo. Ciò renderà i tuoi moduli più robusti rispetto alle modifiche di configurazione nella tua applicazione e sarà più facile riutilizzare autonomamente i pacchetti al di fuori della tua applicazione.
link simbolico
Un altro trucco utile se si sta lavorando su un'applicazione in cui si possono fare link simbolici e non hanno bisogno di supporto per le finestre è quello di link simbolico di una lib/
o app/
cartella in node_modules
. Dalla radice del progetto, eseguire:
ln -s ../lib node_modules/app
e ora da qualsiasi parte del progetto sarai in grado di richiedere i file lib/
facendo require('app/foo.js')
per ottenere lib/foo.js
.
percorsi personalizzati
Potresti vedere alcuni luoghi che parlano dell'utilizzo della $NODE_PATH
variabile d'ambiente o opts.paths
dell'aggiunta di directory per il nodo e di browserify per cercare i moduli.
A differenza della maggior parte delle altre piattaforme, l'utilizzo di un array in stile shell di directory di percorso con $NODE_PATH
non è così favorevole nel nodo rispetto all'utilizzo efficace della node_modules
directory.
Questo perché l'applicazione è più strettamente accoppiata a una configurazione di ambiente di runtime, quindi ci sono più parti mobili e l'applicazione funzionerà solo quando l'ambiente è configurato correttamente.
nodo e browserify supportano entrambi ma scoraggiano l'uso di
$NODE_PATH
.