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
edexport
- 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’oggettomodule.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 .
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function [↩]