La publication de paquets npm peut rapidement devenir un processus fragile et sujet aux erreurs lorsqu’elle repose sur des scripts manuels comme prepublish. L’outil np propose une approche robuste, sécurisée et entièrement automatisée — conçue pour remplacer les pratiques obsolètes tout en intégrant les bonnes pratiques du développement moderne.
Pourquoi np remplace avantageusement prepublish
Le script prepublish (déprécié depuis npm v4) exigeait une orchestration manuelle des étapes critiques : vérification des tests, mise à jour de la version, compilation, poussée Git, et publication. Cette chaîne était souvent incomplète ou inconsistante. np, quant à lui, impose un flux strict et vérifiable :
- Gestion sémantique interactive : sélection guidée (patch/minor/major) via interafce en ligne de commande
- Vérification préalable : détection des fichiers non commités, vérification de la branche
main, contrôle de la présence depackage-lock.json - Exécution séquentielle fiable : installation des dépendances → lancement des tests (
npm test) → build éventuel → incrémentation de version → commit Git → tag → push →npm publish - Sécurité renforcée : interdiction de publier sur une branche non protégée ou depuis un environnement sale
Installation et intégration
Pour l’utiliser globalement (recommandé pour les développeurs multi-projets) :
npm install -g np
Ou localement dans un projet (utile pour verrouiller la version d’np) :
npm install --save-dev np
Ajoutez ensuite un script personnalisé dans package.json :
{
"scripts": {
"ship": "np --no-yarn"
}
}
L’option --no-yarn désactive la détection automatique de Yarn, utile si votre projet utilise uniquement npm.
Workflow interactif en action
Lorsque vous lancez np, l’interface CLI guide l’utilisateur étape par étape :
- Validation de l’état Git (aucune modification non commitée)
- Choix de la prochaine version (via menu interactif ou argument direct)
- Exécution de
npm test— échec = arrêt immédiat - Mise à jour de
package.jsonetpackage-lock.json - Création d’un commit avec message standardisé (
release: v2.1.0) - Génération d’un tag Git (
v2.1.0) et poussée vers le dépôt distant - Publication sur le registre npm avec gestion des tokens et scopes
Commandes courantes
| Objectif | Commande |
|---|---|
| Publier une version stable spécifique | np 3.4.5 |
| Lancer une version alpha/beta | np prerelease --tag next |
| Ignorer les tests (uniquement en local) | np --no-tests |
| Forcer la publication même si Git est sale | np --no-cleanup |
Architecture clé
Le code source de np suit une séparation nette des responsabilités :
src/cli.ts: point d’entrée CLI avec gestion des arguments et validation initialesrc/publish.ts: orchestrateur principal du workflow (appel séquentiel des étapes)src/git.ts: abstraction des opérations Git (status, commit, tag, push)src/npm.ts: encapsulation denpm publishavec gestion des erreurs réseau et d’authantificationsrc/version.ts: logique d’incrémentation sémantique basée sur les commits récents (convention Conventional Commits)
Comparaison fonctionnelle
Contrairement à prepublish, qui ne faisait qu’exécuter un script avant publication sans contrôle ni feedback, np agit comme un superviseur intelligent :
- Il n’exécute pas de scripts arbitraires — il applique un protocole prédéfini et auditable
- Chaque étape peut être annulée ou reprise grâce à un système de checkpoints internes
- Il génère des logs structurés compatibles avec les pipleines CI/CD (ex. GitHub Actions)
- Il intègre nativement la gestion des scopes, des tokens temporaires et des registres privés
Intégration CI/CD recommandée
Dans un environnement automatisé, utilisez np en mode non interactif :
np patch --no-verify --no-publish --no-git-tag-version
Cette commande met à jour la version et génère le commit/tag localement, sans publier — idéal pour préparer une livraison contrôlée via un workflow GitHub Actions.