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 .gitignorefile 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_modulescome 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/fooo node_modules/app/fooperché 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.pathsdell'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_PATHnon è così favorevole nel nodo rispetto all'utilizzo efficace della node_modulesdirectory.
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.