الإخراج إلى سطر الأوامر باستخدام العقدة

كيفية الطباعة إلى وحدة تحكم سطر الأوامر باستخدام Node ، من console.log الأساسي إلى السيناريوهات الأكثر تعقيدًا

الإخراج الأساسي باستخدام وحدة التحكم

توفر العقدة ملفconsoleوحدةوالذي يوفر العديد من الطرق المفيدة جدًا للتفاعل مع سطر الأوامر.

إنه في الأساس نفس ملفconsoleتجده في المتصفح.

الطريقة الأساسية والأكثر استخدامًا هيconsole.log()، والتي تطبع السلسلة التي تمررها إليها إلى وحدة التحكم.

إذا قمت بتمرير كائن ، فسيتم عرضه كسلسلة.

يمكنك تمرير متغيرات متعددة إلىconsole.log، على سبيل المثال:

const x = 'x'
const y = 'y'
console.log(x, y)

وستقوم العقدة بطباعة كليهما.

يمكننا أيضًا تنسيق عبارات جميلة عن طريق تمرير المتغيرات ومحدد التنسيق.

على سبيل المثال:

console.log('My %s has %d years', 'cat', 2)
  • %sتنسيق متغير كسلسلة
  • %dأو%iتنسيق متغير كعدد صحيح
  • %fتنسيق متغير كرقم فاصلة عائمة
  • %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?'
)

ما يحدث هو أن العد سيحسب عدد المرات التي تتم فيها طباعة سلسلة ، ويطبع العدد بجوارها:

يمكنك فقط عد التفاح والبرتقال:

const oranges = ['orange', 'orange']
const apples = ['just one apple']
oranges.forEach(fruit => {
  console.count(fruit)
})
apples.forEach(fruit => {
  console.count(fruit)
})

قد تكون هناك حالات يكون فيها من المفيد طباعة تتبع مكدس الاستدعاءات لوظيفة ما ، ربما للإجابة على السؤالكيف وصلت إلى هذا الجزء من الكود؟

يمكنك القيام بذلك باستخدامconsole.trace():

const function2 = () => console.trace()
const function1 = () => function2()
function1()

سيؤدي هذا إلى طباعة تتبع المكدس. هذا ما تمت طباعته إذا جربت هذا في Node REPL:

Trace
    at function2 (repl:1:33)
    at function1 (repl:1:25)
    at repl:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:44:33)
    at REPLServer.defaultEval (repl.js:239:29)
    at bound (domain.js:301:14)
    at REPLServer.runBound [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()')
  //do something, and measure the time it takes
  doSomething()
  console.timeEnd('doSomething()')
}
measureDoingSomething()

stdout و stderr

كما رأينا ، يعد console.log رائعًا لطباعة الرسائل في وحدة التحكم. هذا ما يسمى الإخراج القياسي ، أوstdout.

console.errorيطبع إلىstderrمجرى.

لن يظهر في وحدة التحكم ، لكنه سيظهر في سجل الأخطاء.

لون الإخراج

يمكنك تلوين إخراج النص الخاص بك في وحدة التحكم باستخدام تسلسلات الهروب. تسلسل الهروب هو مجموعة من الأحرف التي تحدد لونًا.

مثال:

console.log('\x1b[33m%s\x1b[0m', 'hi!')

يمكنك تجربة ذلك في Node REPL ، وستتم طباعتهhi!باللون الأصفر.

ومع ذلك ، فهذه هي الطريقة المنخفضة المستوى للقيام بذلك. إن أبسط طريقة لتلوين إخراج وحدة التحكم هي باستخدام مكتبة.الطباشيرهي مكتبة ، بالإضافة إلى التلوين فهي تساعد أيضًا في تسهيلات التصميم الأخرى ، مثل جعل النص غامقًا أو مائلًا أو تحته خط.

يمكنك تثبيته معnpm install chalk، ثم يمكنك استخدامه:

const chalk = require('chalk')
console.log(chalk.yellow('hi!'))

استخدامchalk.yellowأكثر ملاءمة من محاولة تذكر رموز الهروب ، والشفرة أكثر قابلية للقراءة.

تحقق من رابط المشروع الذي نشرته أعلاه لمزيد من أمثلة الاستخدام.

قم بإنشاء شريط تقدم

تقدمهي حزمة رائعة لإنشاء شريط تقدم في وحدة التحكم. قم بتثبيته باستخدام ملفات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)

تحميل مجانيكتيب Node.js


المزيد من دروس العقدة: