إخراج إلى سطر الأوامر باستخدام Node.js
الإخراج الأساسي باستخدام وحدة التحكم توفر Node.js وحدة تحكم توفر الكثير من الطرق المفيدة للغاية للتفاعل مع سطر الأوامر. إنها في الأساس نفس كائن وحدة التحكم الذي تجده في المتصفح.
الطريقة الأكثر أساسية والأكثر استخدامًا هي console.log()
، والتي تطبع السلسلة التي تمررها إليها إلى وحدة التحكم. إذا مررت بكائن، فسوف يجعلها سلسلة.
يمكنك تمرير متغيرات متعددة إلى console.log
، على سبيل المثال:
const x = 'x';
const y = 'y';
console.log(x, y);
يمكننا أيضًا تنسيق عبارات جميلة عن طريق تمرير المتغيرات ومحدد التنسيق. على سبيل المثال:
console.log('My %s has %d ears', 'cat', 2);
- %s تنسيق متغير كسلسلة - %d تنسيق متغير كرقم - %i تنسيق متغير كجزئه الصحيح فقط - %o تنسيق متغير ككائن مثال:
console.log('%o', Number);
مسح وحدة التحكم
console.clear()
يمسح وحدة التحكم (قد يختلف السلوك حسب وحدة التحكم المستخدمة).
عد العناصر
console.count()
هي طريقة مفيدة. خذ هذا الكود:
const x = 1;
const y = 2;
const z = 3;
console.count('The value of x is '+x+' and has been checked..how many times?');
console.count('The value of x is'+x+'and has been checked..how many times?');
console.count('The value of y is'+y+'and has been checked..how many times?');
ما يحدث هو أن console.count()
ستحسب عدد مرات طباعة سلسلة، وتطبع العدد بجانبها:
يمكنك فقط حساب التفاح والبرتقال:
const oranges = ['orange', 'orange'];
const apples = ['just one apple'];
oranges.forEach(fruit => console.count(fruit));
apples.forEach(fruit => console.count(fruit));
إعادة تعيين العد
تعيد طريقة console.countReset()
تعيين العداد المستخدم مع console.count()
.
سنستخدم مثال البرتقال والتفاح لتوضيح ذلك.
const oranges = ['orange', 'orange'];
const apples = ['just one apple'];
oranges.forEach(fruit => console.count(fruit));
apples.forEach(fruit => console.count(fruit));
console.countReset('orange');
oranges.forEach(fruit => console.count(fruit));
طباعة تتبع المكدس
قد تكون هناك حالات يكون من المفيد فيها طباعة تتبع مكدس النداء لوظيفة، ربما للإجابة على سؤال كيف وصلت إلى هذا الجزء من التعليمات البرمجية؟
يمكنك القيام بذلك باستخدام console.trace()
:
const function2 = () => console.trace();
const function1 = () => function2();
function1();
سوف يقوم هذا بطباعة تتبع المكدس. هذا ما يتم طباعته إذا جربنا هذا في Node.js REPL:
Trace
at function2 (repl:1:33)
at function1 (rep1:1:25)
at rep1:1:1
at ContextifyScript.Script.xunInThisContext (vm.js:44:33)
at REPLServer.defaultEval(repl.js:239:29)
at bound (domain.js:301:14)
at REPLServer.xunBound [as eval](domain.js:314:12)
at REPLServer.onLine (repl.js:440:10)
at emitone (events.js:120:20)
at REPLServer.emit (events.js:210:7)
حساب الوقت المستغرق
يمكنك بسهولة حساب مقدار الوقت الذي تستغرقه دالة للتشغيل، باستخدام time()
و timeEnd()
.
const doSomething = () => console.log('test');
const measureDoingSomething = () => {
console.time('doSomething()');
// قم بشيء ما، وقم بقياس الوقت الذي يستغرقه
doSomething();
console.timeEnd('doSomething()');
};
measureDoingSomething();
stdout و stderr
كما رأينا، فإن console.log
رائع لطباعة الرسائل في وحدة التحكم. هذا ما يسمى الإخراج القياسي، أو stdout.
يقوم console.error
بالطباعة في دفق stderr.
لن يظهر في وحدة التحكم، ولكنه سيظهر في سجل الأخطاء.
تلوين الإخراج
يمكنك تلوين إخراج النص في وحدة التحكم باستخدام تسلسلات الإفلات. تسلسل الإفلات هو مجموعة من الأحرف التي تحدد لونًا.
مثال:
console.log('x1b[33ms/x1b[0m', 'hi!');
يمكنك تجربة ذلك في Node.js REPL، وسوف يقوم بطباعة hi! باللون الأصفر.
ومع ذلك، هذه هي الطريقة منخفضة المستوى للقيام بذلك. أسهل طريقة لتلوين إخراج وحدة التحكم هي استخدام مكتبة. Chalk هي هذه المكتبة، بالإضافة إلى التلوين، فهي تساعد أيضًا في ميزات التصميم الأخرى، مثل جعل النص غامقًا أو مائلًا أو مسطرًا تحته.
تقوم بتثبيته باستخدام npm install chalk
، ثم يمكنك استخدامه:
const chalk = require('chalk');
console.log(chalk.yellow('hi!'));
إن استخدام chalk.yellow
أكثر ملاءمة بكثير من محاولة تذكر رموز الإفلات، والرمز أكثر قابلية للقراءة.
تحقق من رابط المشروع المنشور أعلاه لمزيد من أمثلة الاستخدام.
إنشاء شريط تقدم
progress
هي حزمة رائعة لإنشاء شريط تقدم في وحدة التحكم. قم بتثبيته باستخدام npm install progress
.
هذه القطعة من التعليمات البرمجية تنشئ شريط تقدم من 10 خطوات، ويتم إكمال خطوة واحدة كل 100 مللي ثانية. عندما يكتمل الشريط، نقوم بمسح الفترة الزمنية:
const ProgressBar = require('progress');
const bar = new ProgressBar(':bar', { total: 10 });
const timer = setInterval(() => {
bar.tick();
if (bar.complete) {
clearInterval(timer);
}
}, 100);