package.json
Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 31 von 33.
Ein Projekt benötigt einen zentralen Ort, an dem steht, wie es heißt, welche Version es hat und wie man es ausführt.
Dieser Ort ist package.json. "type": "module" teilt Node mit, dass deine .js-Dateien ES-Module sind. Ohne diese Angabe leitet Node 24 es aus den import-Zeilen ab. Deshalb haben deine Dateien bisher funktioniert. scripts benennt Befehle für npm run, und dependencies listet die Pakete auf, die npm install express nach node_modules herunterlädt. Ein Programm kann die Datei selbst importieren:
{
"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' } teilt Node mit, dass die Datei Daten und kein Code enthält. Ohne diese Angabe verweigert Node den Import.
Aufgabe
Einfach- Ein
version-Befehl gibtnotes 1.2.0aus: den auspackage.jsongelesenennameund dieversion.
Führe node notes.js version aus. Setze dann die Version in package.json auf 1.3.0 und führe den Befehl erneut aus.
Probier es selbst
// Dein Notizentool beginnt hier.
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);
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Node.js-Grundlagen
Übe selbstständig: Express-Playground