Categories
async moduli Node.js npm

Node.js (4)

Scrivere un programma in JavaScript per il browser è un po’ diverso dallo scrivere un programma JavaScript per Node.js. In entrambi i casi il programma si può dividere in moduli indipendenti, tuttavia NodeJS potrebbe usare dei moduli (detti di tipo CommonJS) di tipo diverso da quelli usati dal browser (detti di tipo ES6).

Si vedrà un esempio specifico di un solo tipo, ma ricordiamo che ci sono due tipi di moduli in JavaScript

  • ES Module (introdotti dal 2015, anche per Node.js, usati anche da React Native)
  • CommonJS Module (default per Node.js)

ES6

In particolare, negli ES module

  • si usano le funzioni import ed export
  • si possono importare più funzioni o più classi, si usano le parentesi graffe per indicare quali si desidera importare (separandoli con le virgole)
  • si può importare una sola funzione o una sola classe, e in tale caso non è necessario usare le parentesi graffe
  • con la parola chiave as si può cambiare il nome all’elemento importato

Questo tipo oggi può essere usato anche su Node.js (con import/export), ma potrebbe essere richiesto:

  • di scrivere nel file package.json "type": "module"
  • (senza usare “type”: “module”) scrivere il nome del file con estensione .mjs

Per evitare errori di sintassi si consiglia di rispettare queste semplici regole:

  • Quando si esporta con default non usare le parentesi graffe, nè su export, nè su import
  • Quando si esporta senza default con le parentesi graffe, si importa con le parentesi graffe
export default funzione;
import funzione from './file.js';

oppure

export {funzione};
import {funzione} from './file.js';

CommonJS

Vediamo le differenze che si hanno il tipo precedente:

  • si usa la funzione require() e l’oggetto module.exports
  • a volte si usa semplicemente exports

Quando si desidera usare moduli predefiniti di NodeJS (detti CommonJS) (con require/exports) si potrebbe:

  • scrivere nel file package.json manca il campo type oppure se questo vale "type": "commonjs"
  • (senza usare “type”:”commonjs”) scrivere il nome del file con estensione, .js oppure .cjs
module.exports = {funzione, array};
const f = require('./funzione.js')

In questo esempio, si deve creare una cartella di progetto (progetto4) e inizializzare il progetto. Verrà chiesto di rispondere a delle domande, per generare un file package.json

$ nvm use node
$ mkdir progetto4
$ cd progetto4
$ npm init

Alla domanda “Entry point” si potrebbe usare come risposta: index.js

Si allega il codice sorgente di un esempio di progetto (con licenza CC-by) tratto da questa pagina1 in cui si mostra il funzionamento delle funzioni asincrone:

Ogni funzione JavaScript è scritta all’interno di in un diverso file sorgente, che costituisce un diverso modulo ES6

Per avviare il progetto si può scrivere

node .

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function []

Leave a Reply