Menu
CoddyTech

package.json

Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 31 sur 33.

Un projet a besoin d’un endroit qui indique son nom, sa version et comment le lancer.

Cet endroit, c’est package.json. "type": "module" indique à Node que tes fichiers .js sont des modules ES. Sans cela, Node 24 déduit leur type à partir des lignes import, ce qui explique pourquoi tes fichiers fonctionnaient jusqu’à présent. scripts nomme les commandes pour npm run, et dependencies répertorie les paquets que npm install express télécharge dans node_modules. Un programme peut importer le fichier lui-même :

{
  "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' } indique à Node que le fichier contient des données, et non du code. Sans cela, Node refuse l’importation.

challenge icon

Défi

Facile
  • Une commande version affiche notes 1.2.0 : le name et le version lus dans package.json.

Exécute node notes.js version. Ensuite, définis la version à 1.3.0 dans package.json et exécute à nouveau la commande.

Essayez vous-même

// Votre outil de prise de notes commence ici.
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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les bases de Node.js

Entraînez-vous par vous-même : Playground Express