web-dev-qa-db-fra.com

Comment faire en sorte que plusieurs projets partagent le répertoire node_modules?

Chaque fois que je crée des projets, je dois télécharger toutes les dépendances des modules de nœud. Sans copier les node_modules, est-il possible de partager le node_modules central dans plusieurs projets?

comme les suivants, je dois exécuter de nombreuses commandes à chaque fois ..

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
49
verystrongjoe

Vous pouvez absolument partager un répertoire node_modules entre projets. 

De la documentation du noeud :

Si l'identifiant de module transmis à require () n'est pas un module natif, et ne commence pas par '/', '../' ou './', alors le noeud commence par le répertoire parent du module actuel, et ajoute/node_modules, et tente de charger le module à partir de cet emplacement.

S'il ne s'y trouve pas, il sera déplacé dans le répertoire parent et ainsi de suite, jusqu'à ce que la racine du système de fichiers soit atteinte.

Par exemple, si le fichier situé dans /home/ry/projects/foo.js est appelé require ('bar.js'), alors le noeud regardera dans les emplacements suivants, dans cet ordre:

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

Il suffit donc de placer un dossier node_modules dans votre répertoire de projets et de placer les modules de votre choix. Juste besoin d'eux comme d'habitude. Lorsque node ne trouve pas de répertoire node_modules dans le dossier de votre projet, le dossier parent sera automatiquement vérifié. Alors, créez la structure de votre répertoire comme ceci:

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

Ainsi, même les dépendances de votre sous-projet peuvent s’appuyer sur votre référentiel principal node_modules.

Un inconvénient de le faire de cette façon est que vous devrez créer votre fichier package.json manuellement (à moins que quelqu'un connaisse un moyen d'automatiser cela avec un grunt ou quelque chose du genre). Lorsque vous installez vos packages et ajoutez le paramètre --save arg à une commande npm install, il l’ajoute automatiquement à la section dependencies ou à votre package.json, ce qui est pratique.

52
tpie

J'ai trouvé un truc, jetez un coup d'œil au Liens symboliques (liens symboliques) sous Windows ou Linux , cela fonctionne exactement comme des raccourcis mais plus puissant. 

Vous devez simplement créer un Junction pour votre dossier node_modules où vous voulez. La jonction n'est qu'un raccourci vers votre dossier node_modules d'origine. Créez-le dans votre dossier de projet où les nœuds_modules réels auraient été créés s'ils avaient été utilisés npm install.

Pour ce faire, vous devez disposer d'au moins un dossier node_modules real, puis lui créer une jonction dans les autres projets.

Sous Windows, vous pouvez utiliser l'invite de commande ou utiliser une application. L'utilisation de l'invite de commande vous donne un peu plus de contrôle, l'utilisation d'une application est plus simple. Je suggère/ Link Shell Extension .

9
Eymen Elkum

Essayez pnpm au lieu de npm. 

pnpm utilise des liens physiques et des liens symboliques pour enregistrer une version d'un module une seule fois sur un disque. 

Installer avec:

npm install -g pnpm

Pour mettre à jour vos installations existantes (et vos sous-répertoires), utilisez:

pnpm recursive install
6
Benson

Le répertoire principal devrait ressembler à ceci

node_modules
Project 1
Project 2
Project 3
Project 4

ouvrez simplement le fichier Project 1/.angular-cli.json

changer le schéma 

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

à

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

et n'oubliez pas de créer le dossier node_modules vide dans votre répertoire de projet

1
Shahzad Seraj

En regardant certains articles, il semble que Lerna Soit un bon outil pour gérer plusieurs projets dans un seul répertoire (monorepo). Il prend en charge le partage de modules sans dupliquer l'intégralité des packages dans chaque dossier et les commandes permettant de les installer dans plusieurs projets.

1
Chris

Supposons qu’un seul noeud node_modules contienne tous les packages de toutes les applications. ainsi, vos applications partageront également la plupart des entrées uniques de package.json (seul le nom devrait changer)

mon idée serait d'avoir une seule racine et plusieurs niveaux de src comme ci-dessous

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

le seul problème auquel vous pourriez être confronté serait d'avoir une sauvegarde de json (ou tsconfig) pour n'importe quelle application et de la restaurer lorsque vous y travaillerez ou de configurer vos scripts de démarrage pour servir toute application

0
Fabio Guerrazzi