Pubblicare un pacchetto npm pubblico su npmjs

I pacchetti npm pubblici vengono distribuiti su npmjs.com in modo che altri utenti possano integrarli nei propri progetti.

Pubblicato da ,
Ultima modifica

Per poter pubblicare un pacchetto npm pubblico dobbiamo innanzitutto creare un account su npmjs.com al seguente link

npmjs.com/signup

scegliamo un username, un indirizzo e-mail e una password.

Il passo successivo è di creare un repository pubblico su GitHub, anche in questo caso, se non disponiamo già di un account, ne possiamo creare uno al seguente link

github.com/signup

una volta creato l'account creiamo il nostro repository pubblico, come illustrato in questa guida

docs.github.com/en/get-started/quickstart/create-a-repo

inizialmente il repository è composto solo dai seguenti file

  1. LICENSE
  2. README.md

scriveremo il resto del codice col nostro IDE preferito.

Il repository di esempio per questo articolo si chiama base64_encode_decode e effettuerà la codifica e decodifica in base64 di una stringa con codice nodejs nativo, il codice completo è disponibile al link

github.com/MicheleDeF/base64_encode_decode

Adesso che abbiamo creato il nostro repository, creaiamo ad esempio sul nostro desktop una cartella con lo stesso nome del repository, nel mio caso è base64_encode_decode, apriamo un terminale integrato in questa cartella e lanciamo il seguente comando per clonare nella stessa cartella il repository

$ git clone https://github.com/MicheleDeF/base64_encode_decode.git .

in questo caso MicheleDeF è il mio account GitHub e base64_encode_decode è il nome del repository.

Successivamente nella stessa cartella lanciamo il comando npm init

$ npm init

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 init` 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: (base64_encode_decode)

ci verrà chiesto di indicare un nome per il pacchetto, nel mio caso è @micheledef/base64_encode_decode, micheledef è il mio account npmjs, quindi

$ package name: (base64_encode_decode) @micheledef/base64_encode_decode

e premiamo invio, successivamente ci verranno fatte altre domande, indicare la versione (es. 1.0.0), la descrizione, le keywords, l'autore, ecc..., possiamo lasciare vuote queste informazioni oppure scrivere ciò che vogliamo, al termine del processo verrà creato un file package.json simile a questo

package.json

 {
  "name": "@micheledef/base64_encode_decode",
  "version": "1.0.0",
  "description": "base64_encode and base64_decode with node js",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/MicheleDeF/base64_encode_decode.git"
  },
  "keywords": [
    "base64_encode",
    "base64_decode",
    "node",
    "js"
  ],
  "author": "MicheleDef",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/MicheleDeF/base64_encode_decode/issues"
  },
  "homepage": "https://github.com/MicheleDeF/base64_encode_decode#readme"
}

Adesso tramite il nostro IDE preferito scriviamo il codice, incominciamo a creare un file index.js nella root del pacchetto npm (in questo esempio è la cartella creata in precedenza base64_encode_decode)

index.js

function base64_encode(data){
    let buff = Buffer.from(data);
    let base64_encode_data = buff.toString('base64');
    return base64_encode_data;

}


function base64_decode(data){
let buff = Buffer.from(data, 'base64');
let base64_dencode_data = buff.toString('ascii');
return base64_dencode_data;

}

module.exports = {
    base64_encode,
    base64_decode,
};

ci sono due funzioni base64_encode e base64_decode che effettuano la codifica e decodifica in base64 di una stringa tramite il modulo Buffer di nodejs, esportiamo queste due funzioni con module.exports.

Il passo successivo è di testare il nostro pacchetto prima di pubblicarlo, vediamo come procedere per effettuare un test.

Dalla root del nostro pacchetto (la cartella base64_encode_decode) lanciamo il comando npm link, avremo un output come questo

$ npm link
npm notice created a lockfile as package-lock.json. You should commit this file.

up to date in 0.667s
found 0 vulnerabilities

\bin\nodejs\node-v14\node_modules\@micheledef/base64_encode_decode -> \base64_encode_decode

in che ci indica che possiamo testare il nostro pacchetto, in particolare verrà generato un file package-lock.json simile a questo

package-lock.json

{
  "name": "base64_encode_decode",
  "version": "1.0.0",
  "lockfileVersion": 1
}

Adesso inizializziamo un'altro progetto tramite il comando npm init in un punto qualunque, ad esempio creiamo una cartella test-script sul nostro desktop e apriamo un terminale integrato in questa cartella e lanciamo il comando npm init per inizializzare un nuovo progetto, al termine della procedura installiamo il pacchetto npm @micheledef/base64_encode_decode tramite il seguente comando

$ npm link @micheledef/base64_encode_decode

adesso creiamo un file script.js nella root del progetto test-script con il seguente codice

script.js

const {base64_encode, base64_decode} = require('@micheledef/base64_encode_decode');

let data = "Hello World";
let encode = base64_encode(data);
console.log(encode);

let decode = base64_decode(encode);
console.log(decode);

e poi lanciamo il comando

$ node script.js
SGVsbG8gV29ybGQ=
Hello World

il pacchetto @micheledef/base64_encode_decode funziona è possiamo pubblicarlo su npmjs.com, prima però aggiorniamo il repository su GitHub, possiamo farlo lanciando il seguente comando

$ git add . && git commit -m "First Commit" && git push -u

il repository è aggiornato, e dal nostro profilo Github creiamo una Releases per il nostro repository ad esempio la v1.0.0

Releases

Ora pubblichiamo il pacchetto @micheledef/base64_encode_decode su npmjs.com.

Dalla root del pacchetto @micheledef/base64_encode_decode (la cartella base64_encode_decode) lanciamo il comando

$ npm login

ci verrà chiesto username e password di npmjs.com (l'account che abbiamo creato prima), se il login è andato a buon fine vedremo un messaggio simile a questo

$ Logged in as <username> on https://registry.npmjs.org/.

infine pubblichiamo il pacchetto lanciando il seguente comando

$ npm publish --access public

se tutto è andato a buon fine il pacchetto npm sarà disponibile su npmjs.com, ecco il link del pacchetto npm di esempio illustrato in questo articolo

npmjs.com/package/@micheledef/base64_encode_decode