Existe-t-il un moyen de désinstaller simplement toutes les dépendances inutilisées (non déclarées) d'un projet Node.js (celles qui ne sont plus définies dans mon package.json
.) Lorsque je mets à jour mon application, j'aime que les packages non référencés soient supprimés automatiquement.
414
node_modules
lorsqu'ils sont supprimés de leur dossier respectifpackage.json
?Réponses:
Remarque : Les
npm
versions récentes le font automatiquement lorsque les verrous de package sont activés, ce n'est donc pas nécessaire, sauf pour supprimer les packages de développement avec l'--production
indicateur.Exécutez
npm prune
pour supprimer les modules non répertoriés danspackage.json
.De
npm help prune
:la source
package.json
. Est-ce correct? Ainsi, la prochaine mise à jour ou installation devra les réinstaller.node_modules
répertoire du module , elles sont donc supprimées avec le module.package.json
, mais je quitte le tonneau. Quand je coursnpm prune
, je m'attends à ce que tout le karma, y compris son proprenode_modules
dossier contenant ses dépendances, soit supprimé. Qu'en est-il des dépendances de bower (bower-json, bower-logger, chmodr, fstream, glob, et al.). Techniquement, ceux-ci ne figurent pas dans mes projetspackage.json
. Sont-ils supprimés ou non?node_modules
, mais à l' intérieurnode_modules/bower/node_modules
, "protégés" parnode_modules/bower/package.json
. Les dépendances de votre package et celles des dépendances de votre package ne sont pas mixtes .Si vous n'êtes pas inquiet au sujet d' un couple de minutes le temps de le faire, une solution serait
rm -rf node_modules
et ànpm install
nouveau pour reconstruire les modules locaux.la source
node_modules
vérifie également que lepackage.json
fichier décrit un graphique de dépendance reproductible. Supprimer et réinstaller votrenode_modules
est essentiellement un test de déploiement.npm prune
n'a pas aidé un iota, mais cela a fait. Mon problème était un lien symbolique cassé.Vous pouvez utiliser npm-prune pour supprimer les packages superflus.
Cette commande supprime les packages "étrangers". Si un nom de package est fourni, seuls les packages correspondant à l'un des noms fournis sont supprimés.
Les packages superflus sont des packages qui ne sont pas répertoriés dans la liste des dépendances du package parent.
Si l' indicateur --production est spécifié ou si la variable d'environnement NODE_ENV est définie sur production , cette commande supprimera les packages spécifiés dans vos devDependencies . La définition de --no-production annulera la mise en production de NODE_ENV .
Si l' indicateur --dry-run est utilisé, aucune modification ne sera réellement effectuée.
Si l' indicateur --json est utilisé, les modifications que npm prune a apportées (ou auraient apportées avec --dry-run ) sont imprimées en tant qu'objet JSON.
En fonctionnement normal avec package-locks activé, les modules superflus sont élagués automatiquement lorsque les modules sont installés et vous n'aurez besoin que de cette commande avec l' indicateur --production .
Si vous avez désactivé les verrous de package, les modules superflus ne seront pas supprimés et c'est à vous d'exécuter npm prune de temps en temps pour les supprimer.
Utilisez npm-dedupe pour réduire la duplication
Effectue une recherche dans l'arborescence de packages locale et tente de simplifier la structure globale en déplaçant les dépendances plus haut dans l'arborescence, où elles peuvent être partagées plus efficacement par plusieurs packages dépendants.
Par exemple, considérez ce graphique de dépendance:
Dans ce cas, npm-dedupe transformera l'arborescence en:
En raison de la nature hiérarchique de la recherche de module du nœud, b et d obtiendront tous les deux leur dépendance satisfaite par le package c unique au niveau racine de l'arborescence.
L'algorithme de déduplication parcourt l'arborescence, déplaçant chaque dépendance le plus haut possible dans l'arborescence, même si aucun doublon n'est trouvé. Cela se traduira par un arbre plat et dédupliqué.
la source