Come posso fare in modo che più progetti condividano la directory node_modules?

Ogni volta che realizzo progetti, devo scaricare tutte le dipendenze dei moduli del nodo. Senza copiare i node_modules, Esiste comunque la condivisione dei node_modules centrali in più progetti?

come i seguenti, devo eseguire molti comandi ogni volta ..

npm install gulp-usemin npm install gulp-wrap npm install gulp-connect npm install gulp-watch npm install gulp-minify-css npm install gulp-uglify npm install gulp-concat npm install gulp-less npm install gulp-rename npm install gulp-minify-html 

È assolutamente ansible condividere una directory node_modules tra i progetti.

Dalla documentazione del nodo :

Se l’identificativo del modulo passato a require () non è un modulo nativo, e non inizia con ‘/’, ‘../’, o ‘./’, allora il nodo inizia nella directory padre del modulo corrente e aggiunge / node_modules e tenta di caricare il modulo da quella posizione.

Se non viene trovato lì, passa alla directory principale e così via fino a raggiungere la radice del file system.

Ad esempio, se il file in “/home/ry/projects/foo.js” chiamato require (‘bar.js’), il nodo cercherà nelle seguenti posizioni, in questo ordine:

/home/ry/projects/node_modules/bar.js /home/ry/node_modules/bar.js /home/node_modules/bar.js /node_modules/bar.js

Quindi metti una cartella node_modules all’interno della directory dei tuoi progetti e inserisci i moduli che desideri. Richiedili semplicemente come al solito. Quando il nodo non trova una directory node_modules nella cartella del progetto, controllerà automaticamente la cartella genitore. Quindi rendi la tua directory strutturata in questo modo:

-myProjects --node_modules --myproject1 ---sub-project --myproject2

In questo modo, anche le dipendenze del tuo sottoprogetto possono attingere al tuo repository node_modules principale.

Uno svantaggio di farlo in questo modo è che dovrai compilare manualmente il file package.json (a meno che qualcuno non conosca un modo per automatizzarlo con grunt o qualcosa del genere). Quando si installano i pacchetti e si aggiunge –save arg a un comando di npm install questo viene automaticamente aggiunto alla sezione delle dipendenze o al pacchetto package.json, che è conveniente.

Ho trovato un trucco, basta dare un’occhiata ai collegamenti simbolici (symlink) su Windows o Linux , funziona come scorciatoie ma più potente.

Devi semplicemente creare una Junction per la tua cartella node_modules ovunque tu voglia. Il junction non è altro che una scorciatoia per la tua cartella node_modules originale. Crealo all’interno della cartella del progetto in cui sarebbero stati creati i node_modules reali se usato npm install .

Per ottenere ciò è necessaria almeno una cartella reale node_modules quindi creare una giunzione su di essa negli altri progetti.

Su Windows, è ansible utilizzare il prompt dei comandi o utilizzare un’applicazione. L’utilizzo del prompt dei comandi offre un maggiore controllo, l’utilizzo di un’applicazione è più semplice. Suggerisco Link Shell Extension .

Prova pnpm invece di npm.

pnpm usa hard link e symlink per salvare una sola versione di un modulo solo una volta su un disco.

Installa con:

 npm install -g pnpm 

Per aggiornare le installazioni esistenti (e le sottodirectory) utilizzare:

 pnpm recursive install 

La directory principale dovrebbe apparire così

 node_modules Project 1 Project 2 Project 3 Project 4 

basta aprire il file Project 1/.angular-cli.json

cambia lo schema

 "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 

a

 "$schema": "./../node_modules/@angular/cli/lib/config/schema.json" 

e non dimenticare di creare la cartella vuota node_modules all’interno della directory del progetto

Supponiamo che avendo un singolo node_modules dovrebbe contenere tutti i pacchetti per tutte le applicazioni. quindi le tue app condivideranno anche la maggior parte delle uniche voci package.json (solo il nome dovrebbe cambiare)

la mia idea sarebbe di avere una singola radice e più livelli di src come sotto

 root\package.json root\node_modules root\\.. root\app1\src\\.. root\app2\src\\.. 

l’unico problema che potresti incontrare sarebbe avere un backup di json (o tsconfig) per qualsiasi app e ripristinarli quando lavori su di esso o configurare gli script di avvio per servire qualsiasi app