:::: MENU ::::

Comprendre npm – Astuces et Configuration

Cet article est le deuxième d’une série consacrée à npm, le gestionnaire de paquets pour node.js / io.js :

Comprendre et maîtriser npm  : Introduction

Comprendre npm : astuces et configuration

Maitriser npm : au coeur du workflow

Astuces utiles

Maintenant qu’on à vu les bases, voici quelques astuces utiles :

Mettre à jour npm

Npm est un paquet installé globalement, il peut donc tout à fait être mis à jour comme un paquet normal :

npm update -g npm

Raccourcis

De nombreux raccourcis sont disponibles, par exemple :


# npm install <nom_du_packet>

npm i <nom_du_packet>

# npm install --save <nom_du_packet>

npm i -S <nom_du_packet>

# npm install --saveDev <nom_du_packet>

npm i -D <nom_du_packet>

# npm uninstall <nom_du_packet>

npm rm <nom_du_packet>

De nombreuses commandes reprennent les noms unix ( rm ls ll ..)

Lister les paquets

La commande list permet de lister les paquets installés sous forme d’arbre avec leurs dépendances. Elle identifie également ceux non gérés par package.json comme « extraneous ».


# extrait du package.json

...

"dependencies": {},
"devDependencies": {
    "gulp": "^3.8.10"
}

...

> npm ls

> test@1.0.0 path\to\test
└─┬ gulp@3.8.10
├── archy@1.0.0
├─┬ chalk@0.5.1
│ ├── ansi-styles@1.1.0
│ ├── escape-string-regexp@1.0.2
│ ├─┬ has-ansi@0.1.0

...

Problème, lorsqu’un paquet possède de nombreuses dépendances, l’arbre devient vite très long.

Heureusement une option depth existe et permet de limiter la profondeur. On peut alors afficher uniquement les dépendances directes


> npm ls --depth=0

├── gulp@3.8.10
└── rimraf@2.2.8 extraneous

Cette commande permet aussi de tester la présence de dépendances puisqu’elle va retourner une erreur si un paquet est manquant.

En attrapant l’erreur c’est une fonctionnalité qui peut être utilisée pour vérifier automatiquement la présence des dépendances avant de lancer un script plus long

Nettoyer son dossier node_modules

On l’a vu avec la commande list, npm connait les paquets non identifiés dans package.json . La commande npm prune permet de supprimer les paquets externes au projet et faire le ménage dans son dossier node_modules. Elle est aussi utile pour tester qu’on a bien marqué toutes les dépendances de son projet avant de déployer.


npm prune && npm install

Il peut être intéressant de chaîner npm prune et npm install dans le cas d’un déploiement automatisé, typiquement sur un hook type post-receive de git .

Production flags

L’option –production est utile si vous prévoyez de déployer une application sans phase de build . En effet, elle va limiter l’action aux dépendances normales et ignorer les dépendances de développement ( devDependencies ). Elle peut être utilisée lors de l’installation ou bien avec la commande précédente npm prune, ce qui forcera la suppression des dépendances de développement .

Ce paramètre passée en ligne de commande est équivalent à la présence d’une variable d’environnement NODE_ENV fixée à « production »

Régler le niveau de verbosité

On peut ajouter l’option loglevel qui configure le niveau de verbosité.


> npm install --production --loglevel warn

# ou encore le raccourci

> npm install --silent

# ou pour les plus feignants

> npm install -s

Versionner son projet avec un tag git automatique

La commande version permet de taguer la version de son projet/paquet/module automatiquement. Concrètement elle va mettre à jour le fichier package.json pour vous, soit en fonction de la version que vous lui passez, soit avec des sauts de version prédéfinis suivant semver .

Là où ça devient intéressant, c’est que si un dépôt git est défini dans package.json et que vous avez git d’installé, ce tag sera automatiquement « gitté », vous n’aurez plus qu’à pousser le code !

Savoir si des paquets sont obsolètes

Un bon moyen de savoir si vous devez mettre à jour vos dépendances est d’utiliser la commande npm outdated

résultat de la commande npm outdated

La encore vous pouvez utiliser —depth . L’option –long permet d’obtenir plus d’informations comme le type de dépendance .

Configuration

Si par défaut il n’y a à priori pas besoin de changer la configuration de npm , l’outil dispose néanmoins de nombreuses options qu’il peut être intéressant de connaitre. Outre les arguments passés en ligne de commande comme on a pu le voir précédemment, il est possible de définir des options avec la variable d’environnement npm_config_le paramètre à configurer ou un fichier .npmrc global, utilisateur , ou par projet.

Parmi les nombreuses options disponibles en voici quelques unes qui pourraient vous servir :

Changer le répertoire d’installation global de npm

Par défaut, lorsque vous installez un module en mode global ( -g ) il sera installé dans le dossier node_modules, généralement là où node.js se trouve. Si vous voulez changer cet emplacement, par exemple pour des questions de droits d’accès, il faut modifier l’option prefix en lui indiquant un nouveau chemin.

L’installeur msi de windows place les modules globaux sous [votre user]\AppData\Roaming\npm

Configurer une profondeur limite par défaut

Si après la lecture de cet article vous devenez fan du npm ls et npm outdated, sachez qu’il est possible de limiter la profondeur par défaut au niveau global. L’option —depth que l’on utilise en ligne de commande est aussi disponible en configuration

Utiliser npm derrière un proxy

Npm reconnait automatiquement la présence d’une configuration de proxy à l’aide des variables d’environnement HTTP(S)_PROXY. Si néanmoins cela ne suffisait pas, il est possible de configurer manuellement une adresse en spécifiant  l’option https-proxy et proxy suivant le protocole.

Remettre les valeurs par défaut

En cas de doutes ou si vous voulez repartir à zéro sans tout réinstaller, vous n’avez qu’à supprimer le contenu du fichier de config global.

Pour trouver l’emplacement du fichier de configuration globale de npm voici la commande magique :


npm config get globalconfig

Vous pouvez éditer la configuration directement en passant par npm config ( set, get et delete)

 

Conclusion

Cette fois ci vous commencez surement à vous rendre compte du potentiel de npm . Son usage comme gestionnaire de dépendances ne fait plus aucun doutes et une fois qu’on y a goutté, difficile impossible de revenir en arrière. Dans le prochain article nous verrons comment l’intégrer dans la totalité du workflow de création d’une application javascript, aussi bien pour le back que pour le front.

Notes:
1.  présent dans package.json mais pas dans le répertoire node_modules
2. major | minor | patch | premajor | preminor | prepatch | prerelease
3. c’est le cas pour toutes les options, 3 possibilités : ligne de commande, configuration par fichier, variable d’environnement
 présent dans package.json mais pas dans le répertoire node_modules
major | minor | patch | premajor | preminor | prepatch | prerelease
c’est le cas pour toutes les options, 3 possibilités : ligne de commande, configuration par fichier, variable d’environnement

One Comment

So, what do you think ?