Publier un module sur NPM

NPM est un gestionnaire de modules pour javascript. C'est un des plus grands répertoires de modules où tout developpeur peut publier ou télécharger gratuitement des modules. A l'heure où j'écris cet article, npm contient 844,684 modules. Des millions de publications et de téléchargement se font tous les jours sur npm. Dans cet article, je vais vous montrer comment publier votre propre module sur npm.

Créer un compte sur npm

Bien que npm soit un répertoire public où tout le monde peut télécharger gratuitement des modules, pour publier votre propre module, il faut avoir un compte. Rendez vous sur https://www.npmjs.com/ pour créer votre compte npm gratuitement. Vous aurez besoin d'un nom, d'un email, d'un nom d'utilisateur et d'un mot de passe. Une fois votre compte créé, je vous recommande d'activer le 2FA (Two Factor Authentication) c'est à dire l'authentification à 2 phases. Il vous suffit de télécharger gratuitement l'appli Google Authenticator et de scanner le QR Code dans votre compte. Cette technique permet de mieux protéger votre compte npm. Lizez cet article sur 2FA sur npm.

Créer un projet avec npm

Avant de publier un module sur npm, il faut d'abord le créer. Vous devez donc installer npm sur votre ordinateur. Suivez cet article qu'est ce que nodejs pour installer nodejs et npm sur votre ordinateur. Vérifiez les versions de nodejs et npm avec la commandes suivantes:

node -v
v8.9.3
npm -v
6.4.1

Créez votre projet avec les commandes suivantes:

mkdir npmprojet
cd npmprojet/
npm init

La commande npm init va vous poser quelques questions:

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (npmprojet) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/blochaoufrancois/nodejs/blog/npm/npmprojet/package.json:

{
  "name": "npmprojet",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)

Votre projet NPM est donc créé.

Publier votre projet sur npm

Nous allons maintenant publier notre module sur npm.
Exécutez la commande suivante:

npm login

Cette commande npm login va vous posez quelques questions:

Username:
Password:
Email: (this IS public)
Enter one-time password from your authenticator app:

Vous entrez votre nom d'utilisateur, votre mot de passe, votre email. La dernière question c'est le code généré par Google Authenticator. Vous aurez cette question si vous avez activé le 2FA.
Une fois que vous répondez correctement à ces questions, npm affichera le message:

Logged in as (username) on https://registry.npmjs.org/

Vous êtes donc authentifié sur npm. Pour publier votre module, exécutez la commande suivante:

npm publish --access public

Cette commande va vous demander encore le code 2FA pour publier.

npm notice 
npm notice package: npmprojet@1.0.0
npm notice === Tarball Contents === 
npm notice 205B package.json
npm notice === Tarball Details === 
npm notice name:          npmprojet                               
npm notice version:       1.0.0                                   
npm notice package size:  241 B                                   
npm notice unpacked size: 205 B                                   
npm notice shasum:        1f90da55a868170dcc70d17f36ffe930c55b38e9
npm notice integrity:     sha512-lR54F8g1GbVhL[...]cbLcNNx+jUMVA==
npm notice total files:   1                                       
npm notice 
npm ERR! publish Failed PUT 401
There was an error while trying authentication due to OTP (One-Time-Password).
The One-Time-Password is generated via applications like Authy or
Google Authenticator, for more information see:
https://docs.npmjs.com/getting-started/using-two-factor-authentication
Enter OTP: 031757
+ npmprojet@1.0.0

Votre module est donc publié sur npm. Il portera le nom qui se trouve dans le fichier package.jsonaccompagné du numéro de la version. npmprojet@1.0.0.

{
  "name": "npmprojet",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Si vous faites des modifications, dans votre projet, il suffit de modifier la version et de republier. Modifions la version à 1.0.1et republions.

npm publish --access public
npm notice 
npm notice package: npmprojet@1.0.1
npm notice === Tarball Contents === 
npm notice 205B package.json
npm notice === Tarball Details === 
npm notice name:          npmprojet                               
npm notice version:       1.0.1                                   
npm notice package size:  239 B                                   
npm notice unpacked size: 205 B                                   
npm notice shasum:        dd8d4566677f7d7fdef033aec36208f21dca9b68
npm notice integrity:     sha512-36MXz4ZFWLb8K[...]kqscrswMV2ZGg==
npm notice total files:   1                                       
npm notice 
npm ERR! publish Failed PUT 401
There was an error while trying authentication due to OTP (One-Time-Password).
The One-Time-Password is generated via applications like Authy or
Google Authenticator, for more information see:
https://docs.npmjs.com/getting-started/using-two-factor-authentication
Enter OTP: 484218
+ npmprojet@1.0.1

La version 1.0.1 de notre module est donc publié. Pour voir vos modules rendez vous dans votre compte et cliquez sur Packages.

Vous pouvez aussi publier avec scope sur npm. C'est à dire publier sous votre nom d'utilisateur ou sous une organisation.
Si vous voulez que votre publication aille sous votre nom, il vous suffit de modifier le nom de votre module dans le fichier package.json comme suit: @username/npmprojet. Ici le username est blochaou

npm publish --access public
npm notice 
npm notice package: @blochaou/npmprojet@1.0.1
npm notice === Tarball Contents === 
npm notice 215B package.json
npm notice === Tarball Details === 
npm notice name:          @blochaou/npmprojet                     
npm notice version:       1.0.1                                   
npm notice package size:  252 B                                   
npm notice unpacked size: 215 B                                   
npm notice shasum:        bca468d5b94ddba692856fd4bda1f094b890281a
npm notice integrity:     sha512-17I6hbkNxUuCd[...]1hj2h6Q/xJvGw==
npm notice total files:   1                                       
npm notice 
npm ERR! publish Failed PUT 401
There was an error while trying authentication due to OTP (One-Time-Password).
The One-Time-Password is generated via applications like Authy or
Google Authenticator, for more information see:
https://docs.npmjs.com/getting-started/using-two-factor-authentication
Enter OTP: 486217
+ @blochaou/npmprojet@1.0.1


Lisez cet article https://docs.npmjs.com/orgs/ pour savoir comment créez une organisation et publiser sous elle.

Utilisez votre module dans un projet npm

Nous allons maintenant utiliser nos modules publiés sur npm dans un autre projet. Créez un nouveau projet :

mkdir usenpm
cd usenpm/
npm init --y

--ypour répondre par yes automatiquement à toutes les qestions.
Nous allons télécharger nos modules dans ce nouveau projet. Pour cela, il suffit d'exécuter les commandes suivantes:

npm install npmprojet --save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN usenpm@1.0.0 No description
npm WARN usenpm@1.0.0 No repository field.

+ npmprojet@1.0.1
added 1 package and audited 1 package in 7.089s
found 0 vulnerabilities

le deuxième

npm install @blochaou/npmprojet --save
npm WARN usenpm@1.0.0 No description
npm WARN usenpm@1.0.0 No repository field.

+ @blochaou/npmprojet@1.0.1
added 1 package and audited 2 packages in 6.715s
found 0 vulnerabilities

Votre fichier package.json contient les 2 dépendances que nous avons téléchargées.

cat package.json
{
  "name": "usenpm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@blochaou/npmprojet": "^1.0.1",
    "npmprojet": "^1.0.1"
  }
}

Dépublier votre projet de npm

Vous pouvez dépublier vos modules avec la commande suivante:

npm unpublish nommodule@version --otp=codeAuth

--otp c'est pour le code 2FA.

Nous allons déplublier les 3 modules que nous avons créés.

npm unpublish npmprojet@1.0.0 --otp=428881
- npmprojet@1.0.0
npm unpublish npmprojet@1.0.1 --otp=247126
- npmprojet@1.0.1
npm unpublish @blochaou/npmprojet@1.0.1 --otp=825301
- @blochaou/npmprojet@1.0.1

Conclusion

Merci d'avoir lu mon article sur la publication de module sur npm. J'espère que vous n'aurez plus d'inquiétude pour publier vos modules sur npm.
A bientôt