package.json
جزء من قسم أساسيات Node.js في رحلة Node.js على Coddy. الدرس 31 من 33.
يحتاج المشروع إلى مكان واحد يوضح اسمه وإصداره وكيفية تشغيله.
هذا المكان هو package.json. يخبر "type": "module" Node بأن ملفات .js هي وحدات ES. ومن دونه، يستنتج Node 24 ذلك من أسطر import، ولهذا السبب عملت ملفاتك حتى الآن. تحدد scripts الأوامر التي يمكن تشغيلها باستخدام npm run، وتدرج dependencies الحزم التي ينزّلها npm install express إلى node_modules. ويمكن للبرنامج استيراد الملف نفسه:
{
"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' } Node بأن الملف بيانات وليس شيفرة. ومن دونه، يرفض Node الاستيراد.
التحدي
سهل- يعرض الأمر
versionالقيمةnotes 1.2.0: الاسمينnameوversionالمقروءين منpackage.json.
شغّل node notes.js version. ثم غيّر الإصدار إلى 1.3.0 في package.json وشغّله مرة أخرى.
جرّب بنفسك
// تبدأ أداة الملاحظات الخاصة بك هنا.
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);
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات Node.js
1تشغيل JavaScript على Node
مرحبًا يا Nodeقراءة الأمروسائط سطر الأوامرالأوامرتدرّب بنفسك: Playground لـ Express