Les commandes NPM à connaître

Cet article va avoir pour vocation de vous présenter certaines commandes NPM / options que peut-être vous ne connaissez pas / utilisez pas.

> npm prune

Cette commande au nom un peu bizarre a pour vocation de de faire une purge dans le répertoire "node_modules". En effet, la commande va aller lire le contenu du fichier "package.json" et tout module de "node_modules" qui n'est pas référencé sera alors supprimé.

Cela permet de faire du nettoyage, surtout après que nous ayons eu à télécharger différents modules pour tester, refactorer, etc ...

> npm shrinkwrap

Cette commande au nom imprononçable va faire un "snapshot" de votre répertoire "node_modules". Dans le cas d'une équipe, nous avons le risque d'avoir des personnes qui ont téléchargés des versions de modules différentes, surtout quand nous laissons des wildcards dans les numéros de versions dans le "package.json".

Or comme évoquez dans un précédent article, nous pouvons potentiellement une version patch, qui va nous apporter alors des comportements différents.

Du coup, il existe une solution de base dans NPM qui est "shrinkwrap". Cette commande va analyser tous les modules, sous-modules, récoltés leurs versions et générer un fichier "npm-shrinkwrap.json". L'intérêt va se situer lors du prochain "npm install".

En effet, quand nous lancerons cette classique commande, NPM va aller lire ce fichier, et télécharge précisément les modules, sous-modules par rapport à leurs versions !

Ainsi, cela garantit entre chaque développeur / système que nous aurons toujours la même hiérarchie de dépendances.

Un petit aperçu (vous pouver aussi consulter ce lien: https://github.com/rochejul/gulp-angular-protractor/blob/master/npm-shrinkwrap.json):



Note1: de base, cela n'analyse que la section "dependencies" et "peerDependencies". Si vous souhaitez également gérer les "devDependencies", il suffit de rajouter l'option "--dev" à la commande.

Note2: il est très important de lancer la commande "npm prune" avant de faire un "npm shrinkwrap". Autrement, vous risquez d'avoir des exceptions dans la commande, car elle n'arrivera pas à faire la liaison entre le contenu de "'node_modules" et de "package.json".

> npm install --no-shrinkwrap

Cette option va nous permettre d'ignorer le fichier "npm-shrinkwrap.json" :)

Intéressant quand nous voulons forcer la mise jour du répertoire "node_modules", ou que vous avez entré "à la main" des nouveaux modules dans le fichier "package.json" (sans utiliser les options "--save" ou "--save-dev" pour "npm install").

> npm install --no-registry

Cette option a un nom un peu bizarre, mais peu s'avérer utile, car elle indique que nous voulons installer les dépendances NPM sans se servir du registre NPM.

Traduction: c'est un moyen de faire un "npm install" en offline ! Car cela va utiliser le cache NPM !

Attention toutefois, si vous avez un besoin "intensif" du mode offline, n'oubliez pas de déclarer un délai de caching très grand (car au bout d'un moment, le cache se purge petit à peit):


> npm install --no-scripts

Ici l'option va à la fois ignorer les actions "scripts" définies dans votre package.json (pour de plus ample information / exemple) mais aussi de vos dépendances !

Parfois, certains modules essayent de lancer de long "node-gyp", et nous avons envie d'aller plus vite.

> npm install --production

Là, nous avons une option importante ! En effet, ici, nous n'allons télécharger que les dépendances déclarés dans "dependencies" et "peerDependencies".

Important quand nous souhaitons déployer notre application en production, ou tout du moins la packager.

> npm install --save-exact ...

Au début, j'installais les modules en précisant "--save" ou "--save-dev". Ceci va me modifier le fichier package.json afin de sauvegarder mon module avec la version précisée (ou la dernière trouvée si non précisée).

Le hic, c'est qu'à chaque fois un semver joker était injecté, en l'occurence "^". Ce dernier veut dire que nous voulons à partir de cette version. Comme j'ai l'habitude de figer mes versions, je modifiais le fichier.

Il existe néanmoins une option qui évite que ce semver joker se rajoute, via "--save-exact". Du coup, nous devons taper les commandes comme suit:

> npm install --save-exact --save lodash@3.1.0
> npm install --save-exact --save-dev lodash@3.1.0

NPM et le cache

Il est "possible" de jouer sur la durée du cache des modules NPM. Permettant ainsi de faire du "pseudo-offline" (en mettant une date de validité très grande).

npm config set cache-min 10000000

Commentaires

Posts les plus consultés de ce blog

ISO: liens & outils utiles

NodeJs et SSL: une petite analyse

Créer sa commande slack en quelques minutes