Menu
CoddyTech

package.json

Fa parte della sezione Fondamenti di Node.js del percorso Node.js di Coddy. Lezione 22 di 24.

Un progetto ha bisogno di un unico posto che indichi come si chiama, qual è la sua versione e come eseguirlo.

Quel posto è package.json. "type": "module" permette ai file .js di usare import, scripts assegna i nomi ai comandi per npm run e dependencies elenca i pacchetti che npm install express scarica in node_modules. Un programma può importare il file stesso:

{
  "name": "weather",
  "version": "0.3.1",
  "type": "module",
  "scripts": { "start": "node weather.js" },
  "dependencies": { "express": "^5.1.0" }
}
import pkg from './package.json' with { type: 'json' };
console.log(pkg.version);

with { type: 'json' } indica a Node che il file contiene dati, non codice. Senza questa indicazione, Node rifiuta l'importazione.

challenge icon

Sfida

Facile
  • Un comando version stampa notes 1.2.0: name e version letti da package.json.

Esegui node notes.js version. Poi imposta la versione su 1.3.0 in package.json ed eseguilo di nuovo.

Provalo tu

// Il tuo strumento per gli appunti inizia qui.
import { rmSync } from 'node:fs';
import path from 'node:path';
import { formatNote } from './format.js';
import stats from './legacy/stats.cjs';
import store from './store.js';

const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

store.on('added', (note, n) => {
    console.log(`Saved note ${n}.`);
});

const noteNumber = (word) => {
    const n = Number(word);
    if (!Number.isInteger(n) || n < 1 || n > store.notes.length) {
        console.error(`No note ${word}`);
        process.exit(1);
    }
    return n;
};

if (command === 'add') {
    await store.add(text);
} else if (command === 'list') {
    const owner = process.env.NOTES_OWNER ?? 'you';
    console.log(`Notes for ${owner}`);
    if (store.notes.length === 0) {
        console.log('No notes yet');
    }
    const lines = store.notes.map((note, i) => formatNote(i + 1, note));
    if (store.settings.sort === 'newest') {
        lines.reverse();
    }
    lines.forEach((line) => console.log(line));
} else if (command === 'where') {
    const file = path.join(process.cwd(), 'notes.json');
    console.log(file);
    console.log(path.basename(file));
} else if (command === 'stats') {
    console.log(`${store.notes.length} notes, ${stats.countWords(store.notes)} words`);
} else if (command === 'done') {
    const removed = await store.remove(noteNumber(words[0]));
    console.log(`Done: ${removed}`);
} else if (command === 'remind') {
    const note = store.notes[noteNumber(words[0]) - 1];
    let count = 3;
    const timer = setInterval(() => {
        if (count > 0) {
            console.log(count);
            count -= 1;
        } else {
            console.log(note);
            clearInterval(timer);
        }
    }, 200);
} else if (command === 'import') {
    let input = '';
    for await (const chunk of process.stdin) {
        input += chunk;
    }
    const lines = input
        .split('\n')
        .map((line) => line.trim())
        .filter((line) => line !== '');
    for (const line of lines) {
        await store.add(line);
    }
    console.log(`Imported ${lines.length} notes.`);
} else if (command === 'clear') {
    rmSync('notes.json', { force: true });
    console.log('Deleted notes.json');
} else {
    if (command) {
        console.error(`Unknown command: ${command}`);
    }
    console.error('Usage: node notes.js <command> [words]');
    process.exit(1);
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti di Node.js