
مكتبة Node.js صغيرة وسريعة لتطبيق ألوان ANSI والأنماط في الإخراج الطرفي.
يوفر ANSIS جميع الميزات التي تحتاجها ، يمكنك المقارنة مع المكتبات المماثلة.
ANSIS أسرع من الطباشير والألواح البيئية (في بعض حالات الاستخدام) ، انظر المعايير.

import ansis , { red , green , cyan , black , ansi256 , hex } from 'ansis' ;
ansis . blueBright ( 'file.txt' )
green `Succeful!`
red `Error: ${ cyan ( file ) } not found!`
black . bgYellow `Warning!`
ansi256 ( 214 ) `Orange`
hex ( '#E0115F' ) . bold . underline ( 'Truecolor!' ) مكتبات Node.js الأكثر شعبية على غرار ANSIS:
الطباشير ، الألوان ، الألوان ، Kleur ، Ansi-Colors ، Kolorist ، Cli-Color ، Colors-Cli ، Colors.JS
✅ قارن الميزات؟ قارن معايير أحجام الحزمة
colorette chalk picocolors ansi-colorsimport ansis, { red, bold, ansi256, hex } from 'ansis'red.bold.underline('text')red`Error: ${blue`file.js`} not found!`strikethroughdim سترات underline italic boldred`Error!` redBright`Error!` bgRed`Error!` bgRedBright`Error!`fg(56)`violet` bg(208)`orange`rgb(224, 17, 95)`Ruby` hex('#96C')`Amethyst`open close `foo ${red.open}red{red.close} bar`ansis.strip()NO_COLOR FORCE_COLOR and flags --no-color --colorend of line عند استخدامه n في السلسلةString.prototypeNESTJS ، Facebook/stylex ، تتمة ، Salesforce ، OCLIF ، WebPackBar
إذا اكتشفت خطأً أو لديك اقتراح ميزة ، فلا تتردد في إنشاء مشكلة على Github.
اليوم ، أصغر وأسرع المكتبات هما ansis و picocolors . ينصح مجتمع أدوات ES ككلاهما كأفضل بدائل للمكتبات الأقدم والكثافة.
picocolors : 6.4 كيلو بايت - مكتبة صغيرة ذات ميزات أساسية فقط.аnsis : 7.4 كيلو بايت - مكتبة قوية تحتوي على جميع الميزات التي تحتاجها.chalk : 44.2 كيلو بايت - يوفر وظائف مماثلة لـ ANSIS ولكنها أكبر.picocolors : الأسرع عند تطبيق نمط واحد (على سبيل المثال ، red فقط).аnsis : الأسرع عند تطبيق اثنين أو أكثر من الأنماط (على سبيل المثال ، red + bgWhite ).chalk : أبطأ من كل من Ansis و picocolors في جميع حالات الاستخدام. يتم الحفاظ فقط على ansis ، chalk ، والألواح picocolors بنشاط ، على عكس العديد من المكتبات الأخرى:
colorette : آخر تحديث منذ عامينansi-colors : آخر 3 سنوات تم تحديثه منذ 3 سنواتkleur : آخر تحديث منذ عامينcli-color : آخر تحديث ~ قبل عام واحدcolors-cli : آخر تحديث منذ عام واحدcolors.js : آخر 5 سنوات تم تحديثه منذ 5 سنوات إذا كنت تستخدم نمطًا واحدًا فقط ، مثل red('foo') ، فإن picocolors هو الحل الأفضل.
ومع ذلك ، إذا كنت بحاجة إلى المزيد ، مثل الجمع بين أنماط متعددة (على سبيل المثال ، red + bold + bgWhite ) ،
ANSI256 ألوان ، truecolor ، أو دعم لمجموعة واسعة من البيئات ، فإن Ansis هو الخيار الأفضل.
استكشف قائمة الميزات وأحجام الحزم والمعايير مقارنة بالمكتبات المماثلة.
نصيحة
استخدم بناء الجملة بالسلاسل التي توفرها مكتبات مثل ansis و chalk .
تجنب المكالمات المتداخلة ، لأنها أبطأ بكثير وأقل قابلية للقراءة من بناء الجملة بالسلاسل.
الحفاظ على الكود نظيف وقابل للقراءة!
red . bold . bgWhite `Error` ✅ ansis: faster , shorter , readable
pico . red ( pico . bold ( pico . bgWhite ( 'Error' ) ) ) picocolor: slower , longer , unreadable
red `Error: ${ cyan . underline ( file ) } not found!` ✅ ansis ?
pico . red ( `Error: ${ pico . cyan ( pico . underline ( file ) ) } not found!` ) picocolor ? chalkcolorettepicocolorsansi-colorskleurcli-color npm install ansisيمكنك استيراد الوحدة النمطية الافتراضية أو الألوان المسمى مع بناء جملة ESM أو CommonJS.
// ESM default import
import ansis from 'ansis' ;
// ESM named import
import { red , green , blue } from 'ansis' ;أو
// CommonJS default import
const ansis = require ( 'ansis' ) ;
// CommonJS named import
const { red , green , blue } = require ( 'ansis' ) ;شاهد قائمة ألوان وأنماط ANSI.
console . log ( ansis . green ( 'Success!' ) ) ;
console . log ( green ( 'Success!' ) ) ;
// template string
console . log ( green `Success!` ) ;
// chained syntax
console . log ( green . bold `Success!` ) ;
// nested syntax
console . log ( red `The ${ blue . underline `file.js` } not found!` ) ; مثال أساسي Hello World! :
import { red , black , inverse , reset } from 'ansis' ;
console . log ( green `Hello ${ inverse `ANSI` } World!
${ black . bgYellow `Warning:` } ${ cyan `/path/to/file.js` } ${ red `not found!` } ` ) ; الإخراج: 
يدعم ansis كلاً من default import named import .
// default import
import ansis from 'ansis' ;
ansis . red . bold ( 'text' ) ; يمكنك استيراد الألوان والأنماط والوظائف المسماة. جميع الألوان والأساليب المستوردة قابلة chainable .
// named import
import { red , hex , italic } from 'ansis' ;
red . bold ( 'text' ) ;يمكن الجمع بين الاستيراد الافتراضي والاستيراد المسماة.
// default and named import
import ansis , { red } from 'ansis' ;
const redText = red ( 'text' ) ; // colorized ANSI string
const text = ansis . strip ( redText ) ; // pure string without ANSI codes يدعم ansis كلاً من بناء الجملة red('error') والقالب الحرفي red`error` .
تتيح لك template literals جعل قالبًا معقدًا أكثر قابلية للقراءة وأقصر.
يمكن استخدام function syntax لتلوين متغير.
import { red } from 'ansis' ;
let message = 'error' ;
red ( message ) ;
red `text` ;
red `text ${ message } text` ; جميع الألوان والأنماط والوظائف قابلة للسلسلة. يمكن دمج كل لون أو نمط بأي ترتيب.
import { red , bold , italic , hex } from 'ansis' ;
red . bold `text` ;
hex ( '#FF75D1' ) . bgCyan . bold `text` ;
bold . bgHex ( '#FF75D1' ) . cyan `text` ;
italic . bold . yellow . bgMagentaBright `text` ; يمكنك عش وظائف وسلاسل القالب داخل بعضها البعض. أي من المكتبات الأخرى (الطباشير ، Kleur ، Colorette ، Color.JS وما إلى ذلك) تدعم سلاسل القوالب المتداخلة.
سلاسل القوالب المتداخلة:
import { red , green } from 'ansis' ;
red `red ${ green `green` } red` ;أنماط متداخلة عميقة متداخلة:
import { red , green , cyan , magenta , yellow , italic , underline } from 'ansis' ;
red ( `red ${ italic ( `red italic ${ underline ( `red italic underline` ) } ` ) } red` ) ;
// deep nested chained styles
green (
`green ${ yellow (
`yellow ${ magenta (
`magenta ${ cyan (
`cyan ${ red . italic . underline `red italic underline` } cyan` ,
) } magenta` ,
) } yellow` ,
) } green` ,
) ; الإخراج: 
سلاسل القوالب المتداخلة المتعددة:
import { red , green , hex , visible , inverse } from 'ansis' ;
// defined a Truecolor as the constant
const orange = hex ( '#FFAB40' ) ;
let cpu = 33 ;
let ram = 44 ;
let disk = 55 ;
// normal colors
visible `
CPU: ${ red ` ${ cpu } %` }
RAM: ${ green ` ${ ram } %` }
DISK: ${ orange ` ${ disk } %` }
` ;
// inversed colors
inverse `
CPU: ${ red ` ${ cpu } %` }
RAM: ${ green ` ${ ram } %` }
DISK: ${ orange ` ${ disk } %` }
` ; الإخراج: 
تحتوي الألوان والأنماط على أسماء قياسية تستخدمها العديد من المكتبات الشهيرة ، مثل الطباشير واللون والألوان البيئية والكليور.
| ألوان المقدمة | ألوان الخلفية | أنماط |
|---|---|---|
black | bgBlack | dim |
red | bgRed | bold |
green | bgGreen | italic |
yellow | bgYellow | underline |
blue | bgBlue | strikethroughstrike الاسم المستعار) |
magenta | bgMagenta | inverse |
cyan | bgCyan | visible |
white | bgWhite | hidden |
blackBrightالاسم المستعار: greygray هجاء | bgBlackBrightالاسم المستعار: bgGreybgGray لنا الإملاء | reset |
redBright | bgRedBright | |
greenBright | bgGreenBright | |
yellowBright | bgYellowBright | |
blueBright | bgBlueBright | |
magentaBright | bgMagentaBright | |
cyanBright | bgCyanBright | |
whiteBright | bgWhiteBright |
الافتراضيات ، مثيل ansis المستورد يحتوي على أنماط وألوان أساسية. لتمديد الألوان الأساسية مع أسماء الألوان المخصصة لـ Truecolor ، استخدم طريقة ansis.extend() .
import ansis from 'ansis' ;
// extend base colors
ansis . extend ( {
pink : '#FF75D1' ,
orange : '#FFAB40' ,
} ) ;
// the custom colors are available under namespace `ansis`
ansis . pink ( 'text' ) ;
ansis . orange ( 'text' ) ;مثال الاستخدام مع TypeScript:
import ansis , { AnsiColorsExtend } from 'ansis' ;
// extend base colors
ansis . extend ( {
pink : '#FF75D1' ,
orange : '#FFAB40' ,
} ) ;
const write = ( style : AnsiColorsExtend < 'pink' | 'orange' > , message : string ) => {
console . log ( ansis [ style ] ( message ) ) ;
}
write ( 'red' , 'message' ) ; // base color OK
write ( 'pink' , 'message' ) ; // extended color OK
write ( 'orange' , 'message' ) ; // extended color OK
write ( 'unknown' , 'message' ) ; // TypeScript Error مجموعة محددة مسبقا من 256 لون.

| نطاق الكود | وصف |
|---|---|
| 0 - 7 | الألوان القياسية |
| 8 - 15 | ألوان زاهية |
| 16 - 231 | 6 × 6 × 6 مكعب (216 لونًا) |
| 232 - 255 | رمادي من الأسود إلى الأبيض في 24 خطوة |
وظيفة المقدمة: ansi256(code) لديه اسم مستعار قصير fg(code)
وظيفة الخلفية: bgAnsi256(code) لديه اسم مستعار قصير bg(code)
يتم تنفيذ طرق
ansi256()وbgAnsi256()للتوافق مع APIchalk.
انظر رموز الألوان ANSI.
إذا كانت المحطة تدعم 16 لونًا فقط ، فسيتم تحريف ألوان ANSI 256 إلى 16 لونًا.

import { bold , ansi256 , fg , bgAnsi256 , bg } from 'ansis' ;
// foreground color
ansi256 ( 96 ) `Bright Cyan` ;
fg ( 96 ) `Bright Cyan` ; // alias for ansi256
// background color
bgAnsi256 ( 105 ) `Bright Magenta` ;
bg ( 105 ) `Bright Magenta` ; // alias for bgAnsi256
// function is chainable
ansi256 ( 96 ) . bold `bold Bright Cyan` ;
// function is avaliable in each style
bold . ansi256 ( 96 ) . underline `bold underline Bright Cyan` ;
// you can combine the functions and styles in any order
bgAnsi256 ( 105 ) . ansi256 ( 96 ) `cyan text on magenta background`
bg ( 105 ) . fg ( 96 ) `cyan text on magenta background` يمكنك استخدام تنسيق hex أو rgb .
وظيفة المقدمة: hex() rgb()
وظيفة الخلفية: bgHex() bgRgb()
import { bold , hex , rgb , bgHex , bgRgb } from 'ansis' ;
// foreground color
hex ( '#E0115F' ) . bold `bold Ruby` ;
hex ( '#96C' ) `Amethyst` ;
rgb ( 224 , 17 , 95 ) . italic `italic Ruby` ;
// background color
bgHex ( '#E0115F' ) `Ruby` ;
bgHex ( '#96C' ) `Amethyst` ;
bgRgb ( 224 , 17 , 95 ) `Ruby` ;
// you can combine the functions and styles in any order
bold . hex ( '#E0115F' ) . bgHex ( '#96C' ) `ruby bold text on amethyst background` يدعم ansis الاحتياطي إلى مساحة الألوان المدعومة.
Truecolor —> 256 colors —> 16 colors —> no colors (black & white)
إذا كنت تستخدم وظائف hex() أو rgb() أو ansis256() في محطة غير مدعومة غير مدعومة أو 256 لونًا ، فسيتم تحريف الألوان.

يمكنك استخدام رموز ANSI Escape مع خصائص open close لكل نمط.
import { red , bold } from 'ansis' ;
// each style has `open` and `close` properties
console . log ( `Hello ${ red . open } ANSI ${ red . close } World!` ) ;
// you can defiene own style which will have the `open` and `close` properties
const myStyle = bold . italic . black . bgHex ( '#E0115F' ) ;
console . log ( `Hello ${ myStyle . open } ANSI ${ myStyle . close } World!` ) ; تحتوي فئة ANSIS على Method strip() لإزالة جميع رموز ANSI من السلسلة.
import ansis from 'ansis' ;
const ansiString = ansis . green `Hello World!` ;
const string = ansis . strip ( ansiString ) ; سوف تحتوي string المتغيرة على السلسلة النقية بدون رموز ANSI.
يدعم استراحة النمط الصحيح في end of line .
import { bgGreen } from 'ansis' ;
console . log ( bgGreen `nAnsisnNew LinenNext New Linen` ) ; 
حدد موضوعاتك الخاصة:
import ansis from 'ansis' ;
const theme = {
info : ansis . cyan . italic ,
warn : ansis . black . bgYellowBright ,
error : ansis . red . bold ,
ruby : ansis . hex ( '#E0115F' ) ,
} ;
theme . info ( 'info' ) ;
theme . warn ( 'warning' ) ;
theme . error ( 'error' ) ;
theme . ruby ( 'Ruby color' ) ; الإعدادات الافتراضية ، يتم تلوين الإخراج في وحدة التحكم الطرفية والإخراج في ملف غير ملصق.
لفرض تعطيل أو تمكين متغيرات البيئة استخدام الإخراج الملون NO_COLOR و FORCE_COLOR .
يجب أن يكون متغير NO_COLOR يعرض أي قيمة فارغة. القيمة ليست مهمة ، على سبيل المثال ، NO_COLOR=1 NO_COLOR=true .
انظر الوصف القياسي بواسطة no_color.
يجب أن يكون متغير FORCE_COLOR يعرض إحدى القيم:
FORCE_COLOR=0 تعطيل القوة الألوان
FORCE_COLOR=1 قوة تمكين الألوان
انظر الوصف القياسي بواسطة Force_Color.
على سبيل المثال ، app.js :
import { red } from 'ansis' ;
console . log ( red `red color` ) ;تنفيذ البرنامج النصي في محطة:
$ node app.js # colored output in terminal
$ node app.js > log.txt # output in file without ANSI codes
$ NO_COLOR=1 node app.js # force disable colors, non colored output in terminal
$ FORCE_COLOR=0 node app.js # force disable colors, non colored output in terminal
$ FORCE_COLOR=1 node app.js > log.txt # force enable colors, output in file with ANSI codes
COLORTERM يتم استخدام متغير بيئة COLORTERM من قبل المحاكيات الطرفية للإشارة إلى الدعم للألوان. يمكن أن تختلف قيمتها اعتمادًا على المحاكي الطرفي ومستوى دعم الألوان المقدم.
القيم الشائعة الاستخدام المدعومة من ansis :
truecolor أو 24bit - 16 مليون لونansi256 - ANSI 256 Coloransi - ألوان ANSI 16 الأساسيةيمكنك تعيين المتغير في CMD قبل تشغيل البرنامج النصي للعقدة:
COLORTERM=truecolor node script.js # force use truecolor
COLORTERM=ansi256 node script.js # force use 256 colors
COLORTERM=ansi node script.js # force use 16 olors
لتعيين مستوى اللون في البرنامج النصي ، قم بإنشاء ملف JS الذي تحدد فيه متغير بيئة COLORTERM بالقيمة المطلوبة ، واستيراد هذا الملف قبل ansis .
قد يكون هذا مفيدًا ، على سبيل المثال ، لاختبار تطبيق CLI الخاص بك للتأكد من أن نتائج الاختبار ستكون هي نفسها بغض النظر عن مستوى اللون المدعوم في بيئات ومحطات مختلفة.
المستوى truecolor.js
process . env . COLORTERM = 'truecolor' ;ملف البرنامج النصي الخاص بك:
import './level-truecolor' ; // <= force use truecolor
import { red , ansi256 , hex } from 'ansis' ;
console . log ( hex ( '#FFAB40' ) ( 'orange' ) ) ; // native ANSI RGB color value
console . log ( ansi256 ( 200 ) ( 'pink' ) ) ; // native ANSI 256 color value
console . log ( red ( 'red' ) ) ; // native ANSI 16 color value المستوى 256Colors.JS
process . env . COLORTERM = 'ansi256' ;ملف البرنامج النصي الخاص بك:
import './level-256colors' ; // <= force use 256 colors
import { red , ansi256 , hex } from 'ansis' ;
console . log ( hex ( '#FFAB40' ) ( 'orange' ) ) ; // fallback to ANSI 256 color value
console . log ( ansi256 ( 200 ) ( 'pink' ) ) ; // native ANSI 256 color value
console . log ( red ( 'red' ) ) ; // native ANSI 16 color value المستوى 16Colors.JS
process . env . COLORTERM = 'ansi' ;ملف البرنامج النصي الخاص بك:
import './level-16colors' ; // <= force use 16 olors
import { red , ansi256 , hex } from 'ansis' ;
console . log ( hex ( '#FFAB40' ) ( 'orange' ) ) ; // fallback to ANSI 16 color value - `bright red`
console . log ( ansi256 ( 200 ) ( 'pink' ) ) ; // fallback to ANSI 16 color value - `bright magenta`
console . log ( red ( 'red' ) ) ; // native ANSI 16 color value استخدم وسيطات CMD- --no-color أو- --color=false لتعطيل الألوان و --color لتمكين تلك.
على سبيل المثال ، App.js script قابل للتنفيذ:
#!/usr/bin/env node
import { red } from 'ansis' ;
console . log ( red `red color` ) ;تنفيذ البرنامج النصي في محطة:
$ ./app.js # colored output in terminal
$ ./app.js --no-color # non colored output in terminal
$ ./app.js --color=false # non colored output in terminal
$ ./app.js > log.txt # output in file without ANSI codes
$ ./app.js --color > log.txt # output in file with ANSI codes
$ ./app.js --color=true > log.txt # output in file with ANSI codes
تحذير
وسيطات سطر الأوامر لها أولوية أعلى من متغير البيئة.
يكتشف Ansis تلقائيًا مساحة الألوان المدعومة:
ANSIS لديه طريقة isSupported() التي تُرجع قيمة boolean ما إذا كان الإخراج يدعم لون ANSI والأنماط.
import ansis from 'ansis' ;
console . log ( 'Color output: ' , ansis . isSupported ( ) ) ; لا توجد طريقة قياسية لاكتشاف مساحة الألوان المدعومة. الطريقة الأكثر شيوعًا لاكتشاف دعم الألوان هي التحقق من متغيرات بيئة TERM COLORTERM . يمكن اكتشاف أنظمة CI عن طريق التحقق من وجود CI وغيرها من متغيرات البيئة على وجه التحديد. ادمج ذلك مع المعرفة حول نظام التشغيل الذي يعمل عليه البرنامج ، ولدينا طريقة لائقة بما يكفي لاكتشاف الألوان.
| صالة | Ansi 16 الألوان | Ansi 256 الألوان | حقيقي لون | البيئة. شرط | البيئة. اللون | على وجه التحديد متغيرات البيئة |
|---|---|---|---|---|---|---|
| Azure CI | ✅ | أحمق | TF_BUILD Agent_Name | |||
| جيثب CI | ✅ | ✅ | ✅ | أحمق | CI ، github_actions | |
| جيتيا CI | ✅ | ✅ | ✅ | أحمق | CI ، gitea_actions | |
| Gitlab CI | ✅ | أحمق | CI ، gitlab_ci | |||
| ترافيس سي | ✅ | أحمق | ترافيس | |||
| PM2 ليس استز | ✅ 1 | ✅ 1 | ✅ 1 | أحمق | PM2_HOME PM_ID | |
| JetBrains Teamcity > = 2020.1.1 | ✅ | ✅ | teamcity_version | |||
| فكرة Jetbrains | ✅ | ✅ | ✅ | Xterm-256Color | terminal_emulator = 'jetbrains-jediterm' | |
| مقابل الكود | ✅ | ✅ | ✅ | Xterm-256Color | truecolor | |
| النوافذ صالة | ✅ | ✅ | ✅ 2 | |||
| النوافذ PowerShell | ✅ | ✅ | ✅ 2 | |||
| محطة ماكوس | ✅ | ✅ | Xterm-256Color | |||
| iterm | ✅ | ✅ | ✅ | Xterm-256Color | truecolor | |
| المحاكي الطرفي كيتي | ✅ | ✅ | ✅ | xterm-kitty | ||
| المحاكي الطرفي KDE Konsole | ✅ | ✅ | ✅ | Xterm-Direct |
انظر أيضا:
قم بتشغيل الأمر لمعرفة دعم بعض الميزات من قبل مختلف المكتبات:
npm run compare
| مكتبة ________________ - اسم الاستيراد - تسمية الألوان | Ansi 16 ألوان | Ansi 256 الألوان | حقيقي لون | بالسلاسل بناء الجملة | متداخل سلاسل القالب | جديد خط | احتياطي للألوان | يدعم بيئة اسكواش أعلام CLI |
|---|---|---|---|---|---|---|---|---|
ansis✅ named import✅ standard | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | → 256 → 16 → b & w | NO_COLORFORCE_COLOR--no-color--color |
chalknamed import✅ standard | ✅ | ✅ | ✅ | ✅ | ✅ | → 256 → 16 → b & w | NO_COLORFORCE_COLOR--no-color--color | |
kolorist✅ named importstandard | ✅ | ✅ | ✅ | → 256 → b & w | NO_COLORFORCE_COLOR | |||
cli-colornamed import✅ standard | ✅ | ✅ | ✅ | → 16 → b & w | NO_COLOR | |||
colors-clinamed importstandard | ✅ | ✅ | ✅ | ✅ | → b & w | --no-color--color | ||
colors.jsnamed importstandard | ✅ | ✅ | ✅ | → b & w | FORCE_COLOR--no-color--color | |||
ansi-colorsnamed import✅ standard | ✅ | ✅ | ✅ | FORCE_COLOR | ||||
colorette✅ named import✅ standard | ✅ | → b & w | NO_COLORFORCE_COLOR--no-color--color | |||||
picocolorsnamed import✅ standard | ✅ منذ V1.1.0 | → b & w | NO_COLORFORCE_COLOR--no-color--color | |||||
kleur✅ named import✅ standard | 8 ألوان | ✅ | → b & w | NO_COLORFORCE_COLOR |
ملحوظة
اسم الاستيراد
ESM
import { red, green, blue } from 'lib';
CJS
const { red, green, blue } = require('lib');تسمية الألوان
- المعيار: الألوان لها أسماء قياسية ، على سبيل المثال:
red،redBright،bgRed،bgRedBright- غير قياسي : الألوان لها أسماء خاصة lib ، على سبيل المثال:
brightRed،bgBrightRed،red_b،red_bttANSI 256 ألوان
أسماء الطريقة:
colors-cli:x<n>cli-color:xterm(n)chalk:ansi256(n)bgAnsi256(n)ansis:ansi256(n)bgAnsi256(n)fg(n)bg(n)truecolor
أسماء الطريقة:
chalk:hex()rgb()ansis:hex()rgb()بناء الجملة بالسلاسل
lib.red.bold('text')سلاسل قالب متداخلة
lib.red`text ${lib.cyan`nested`} text`خط جديد
أنماط الاستراحة الصحيحة فيend-of-line.lib.bgGreen(`First Line Next Line`);
| حزمة NPM | تحميل حجم Tarball | حجم تفريغ | حجم الرمز |
|---|---|---|---|
picocolors | 2.6 كيلو بايت | 6.4 كيلو بايت | 2.6 كيلو بايت |
ansis | 3.8 كيلو بايت | 7.4 كيلو بايت | 3.4 كيلو بايت |
colorette | 4.9 كيلو بايت | 17.0 كيلو بايت | 3.4 كيلو بايت |
kleur | 6.0 كيلو بايت | 20.3 كيلو بايت | 2.7 كيلو بايت |
ansi-colors | 8.5 كيلو بايت | 26.1 كيلو بايت | 5.8 كيلو بايت |
kolorist | 8.7 كيلو بايت | 51.0 كيلو بايت | 6.8 كيلو بايت |
colors.js | 11.0 كيلو بايت | 39.5 كيلو بايت | 18.1 كيلو بايت |
chalk | 13.1 كيلو بايت | 43.7 كيلو بايت | 16.4 كيلو بايت |
cli-color | 13.8 (216 كيلو بايت) | 39.6 (754 كيلو بايت) | 12.1 كيلو بايت |
colors-cli | 361.7 كيلو بايت | 511.0 كيلو بايت | 8.7 كيلو بايت |
حجم التنزيل: حجم Gzipped لحزمة NPM.
الحجم غير المعبأ: حجم حزمة NPM في node_modules/ Directory ، (incl. dependencies) .
حجم الرمز : حجم التعليمات البرمجية الموزعة التي سيتم تحميلها عبر require أو import في تطبيقك.
انظر أيضا:
git clone https://github.com/webdiscus/ansis.git
cd ./ansis
npm i
npm run demoلقياس الأداء يستخدم المعيار.
تحذير
vitest benchmark يولد نتائج خاطئة/ غير واقعية .
على سبيل المثال ، نتائج المقعد البسيط:
chalk.red('foo') - 7.000.000 ops/sec
ansis.red('foo') - 23.000.000 ops/sec (x3 faster is WRONG result)
نتائج الأداء الفعلية للطباشير والـ ANSIS في هذا الاختبار متشابهة جدًا.
git clone https://github.com/webdiscus/ansis.git
cd ./ansis
npm i
npm run build
npm run benchتم اختباره على
MacBook Pro 16 "M1 MAX 64GB
ماكوس سيكويا 15.1
node.js v22.11.0
TerminaliTerm2V3.5.0
ملحوظة
في الاختبارات ، تستخدم كل مكتبة أسرع طريقة تصميم متاحة لمقارنة الأداء المطلق لكل مكتبة.
في الممارسة الحقيقية ، لا يمكن لأحد أن يستخدم أبطأ طريقة (مثل المكالمات المتداخلة) لتصميم سلسلة عندما توفر المكتبة طريقة أسرع وأقصر بالسلاسل.
على سبيل المثال:
lib . red . bold . bgWhite ( ' ERROR ' ) // ✅ faster, shorter, readable
lib . red ( lib . bold ( lib . bgWhite ( ' ERROR ' ) ) ) // slower, longer, unreadable يستخدم الاختبار البسيط نمطًا واحدًا فقط. لا تدعم Picocolors و Colorette و Kleur بناء جملة بالسلاسل أو استراحة النمط الصحيح (Wenn المستخدمة `n` في سلسلة) ، لذا فهي الأسرع في حالة الاستخدام البسيطة هذه. لا وظيفة ، لا الأداء النفقات العامة .
ansis . red ( 'foo' )
chalk . red ( 'foo' )
picocolors . red ( 'foo' )
. . . + [email protected] 109.212.939 ops/sec
[email protected] 108.044.800 ops/sec
[email protected] 87.800.739 ops/sec
- > [email protected] 60.606.043 ops/sec -44.5%
- [email protected] 55.702.479 ops/sec -48.9%
[email protected] 37.069.069 ops/sec
[email protected] 14.364.378 ops/sec
[email protected] 7.060.583 ops/sec
[email protected] 2.753.751 ops/sec
[email protected] 897.746 ops/secباستخدام نمطين فقط ، يعد Picocolors أبطأ بالفعل ، لأن استخدام بناء الجملة المرتوم أسرع من المكالمات المتداخلة.
ansis . red . bold ( 'foo' )
chalk . red . bold ( 'foo' )
picocolors . red ( picocolors . bold ( 'foo' ) ) // chained syntax is not supported
. . . + [email protected] 60.468.181 ops/sec
- [email protected] 58.777.183 ops/sec -2.8%
- [email protected] 47.789.020 ops/sec -21.5%
[email protected] 33.387.988 ops/sec
[email protected] 13.420.047 ops/sec
[email protected] 5.972.681 ops/sec
[email protected] 4.086.412 ops/sec
[email protected] 3.018.244 ops/sec
[email protected] 1.817.039 ops/sec
[email protected] 695.601 ops/secباستخدام 3 أنماط ، فإن picocolors أبطأ 2x من Ansis.
ansis . red . bold . bgWhite ( 'foo' )
chalk . red . bold . bgWhite ( 'foo' )
picocolors . red ( picocolors . bold ( picocolors . bgWhite ( 'foo' ) ) ) // chained syntax is not supported
. . . + [email protected] 59.463.640 ops/sec
- [email protected] 42.166.783 ops/sec -29.0%
- [email protected] 32.434.017 ops/sec -45.5% (~2x slower than Ansis)
[email protected] 13.008.117 ops/sec
[email protected] 5.608.244 ops/sec
[email protected] 5.268.630 ops/sec
[email protected] 2.145.517 ops/sec
[email protected] 1.686.728 ops/sec
[email protected] 1.453.611 ops/sec
[email protected] 590.467 ops/secفي حالات نادرة ، عند استخدام 4 أنماط ، تصبح الألوان البالغة بطيئة 3.4x من ANSIS.
ansis . red . bold . underline . bgWhite ( 'foo' )
chalk . red . bold . underline . bgWhite ( 'foo' )
picocolors . red ( picocolors . bold ( picocolors . underline ( picocolors . bgWhite ( 'foo' ) ) ) ) // chained syntax is not supported
. . . + [email protected] 59.104.535 ops/sec
- [email protected] 36.147.547 ops/sec -38.8%
- [email protected] 17.581.709 ops/sec -70.2% (~3x slower than Ansis)
[email protected] 7.981.171 ops/sec
[email protected] 4.825.665 ops/sec
[email protected] 3.729.880 ops/sec
[email protected] 1.514.053 ops/sec
[email protected] 1.229.999 ops/sec
[email protected] 1.210.931 ops/sec
[email protected] 481.073 ops/secالاختبار المعقد مع أنماط واحدة متداخلة بعمق.
c . green (
`green ${ c . cyan (
`cyan ${ c . red (
`red ${ c . yellow (
`yellow ${ c . blue (
`blue ${ c . magenta ( `magenta ${ c . underline ( `underline ${ c . italic ( `italic` ) } underline` ) } magenta` ) } blue` ,
) } yellow` ,
) } red` ,
) } cyan` ,
) } green` ,
) + [email protected] 1.110.056 ops/sec
- [email protected] 1.073.299 ops/sec
- > [email protected] 847.246 ops/sec -23.7%
[email protected] 847.110 ops/sec
- [email protected] 573.942 ops/sec -48.3%
[email protected] 471.285 ops/sec
[email protected] 439.588 ops/sec
[email protected] 382.862 ops/sec
[email protected] 213.351 ops/sec
[email protected] 41.097 ops/sec المعيار المستخدم في colorette للأنماط الفردية.
c . red ( ` ${ c . bold ( ` ${ c . cyan ( ` ${ c . yellow ( 'yellow' ) } cyan` ) } ` ) } red` ) + [email protected] 3.861.384 ops/sec
[email protected] 3.815.039 ops/sec
- > [email protected] 2.918.269 ops/sec -24.4%
[email protected] 2.548.564 ops/sec
- [email protected] 2.502.850 ops/sec -35.2%
[email protected] 2.229.023 ops/sec
[email protected] 1.426.279 ops/sec
[email protected] 1.123.139 ops/sec
[email protected] 481.708 ops/sec
[email protected] 114.570 ops/sec مؤشر picocolors ، تعديل قليلا. تمت إضافة المزيد من التعقيد من خلال تطبيق نمطين على الكلمة الملونة بدلاً من واحدة.
let index = 1e8 ;
c . red ( '.' ) +
c . yellow ( '.' ) +
c . green ( '.' ) +
c . red . bold ( ' ERROR ' ) +
c . red ( 'Add plugin ' + c . cyan . underline ( 'name' ) + ' to use time limit with ' + c . cyan ( ++ index ) ) ; + [email protected] 2.601.559 ops/sec
- > [email protected] 2.501.227 ops/sec -3.8%
[email protected] 2.326.491 ops/sec
- [email protected] 2.129.106 ops/sec -18.1%
[email protected] 1.780.496 ops/sec
[email protected] 1.685.703 ops/sec
[email protected] 838.542 ops/sec
[email protected] 533.362 ops/sec
[email protected] 287.558 ops/sec
[email protected] 97.463 ops/secملحوظة
في هذا الاختبار ، الذي هو أقرب إلى الاستخدام العملي ، تستخدم كل مكتبة أسرع طريقة للتصميم المتاحة.
لذلك ، يستخدم chalk ، ansis ، ansi-colors ، cli-color ، colors-cli و colors طريقة بالسلاسل ، على سبيل المثال c.red.bold(' ERROR ') . بينما يستخدم picocolors ، يستخدم colorette و kolorist المكالمات المتداخلة ، على سبيل المثال c.red(c.bold(' ERROR ')) ، لأن لا يدعم النشاطلة المقيدة بالسلاسل.
Ansis هو بديل قوي وصغير وسريع لا يتطلب أي ترحيل رمز للعديد من المكتبات المماثلة.
ما عليك سوى استبدال import ... from ... أو require(...) إلى ansis .
- import chalk from 'chalk';
+ import chalk from 'ansis';يدعم ANSIS بناء جملة الطباشير وهو متوافق* مع أنماط وأسماء الألوان ، لذلك لا تحتاج إلى تعديل الكود الأصلي:
chalk . red . bold ( 'Error!' ) ;
// colorize "Error: file not found!"
chalk . red ( `Error: ${ chalk . cyan . bold ( 'file' ) } not found!` ) ;
// ANSI 256 colors
chalk . ansi256 ( 93 ) ( 'Violet color' ) ;
chalk . bgAnsi256 ( 194 ) ( 'Honeydew, more or less' ) ;
// truecolor
chalk . hex ( '#FFA500' ) . bold ( 'Bold orange color' ) ;
chalk . rgb ( 123 , 45 , 67 ) . underline ( 'Underlined reddish color' ) ;
chalk . bgHex ( '#E0115F' ) ( 'Ruby' ) ;
chalk . bgHex ( '#96C' ) ( 'Amethyst' ) ; تحذير
لا يدعم ANSIS النمط overline ، لأنه غير مدعوم على نطاق واسع ولا يستخدمه أحد.
تحقق من رمزك وإزالة النمط overline :
- chalk.red.overline('text');
+ chalk.red('text');اختياريا ، يمكنك إعادة كتابة نفس الرمز لجعله أقصر وأنظف:
import { red , cyan , ansi256 , bgAnsi256 , fg , bg , hex , rgb , bgHex , bgRgb } from 'ansis' ;
red . bold ( 'Error!' ) ; // using parentheses
red . bold `Error!` ; // using template string
// colorize "Error: file not found!"
red `Error: ${ cyan . bold `file` } not found!` ;
// ANSI 256 colors
ansi256 ( 93 ) `Violet color` ;
bgAnsi256 ( 194 ) `Honeydew, more or less` ;
fg ( 93 ) `Violet color` ; // alias for ansi256
bg ( 194 ) `Honeydew, more or less` ; // alias for bgAnsi256
// truecolor
hex ( '#FFA500' ) . bold `Bold orange color` ;
rgb ( 123 , 45 , 67 ) . underline `Underlined reddish color` ;
bgHex ( '#E0115F' ) `Ruby` ;
bgHex ( '#96C' ) `Amethyst` ; - import { red, bold, underline } from 'colorette';
+ import { red, bold, underline } from 'ansis'; ANSIS متوافق تمامًا مع أنماط colorette وأسماء الألوان ، لذلك لا تحتاج إلى تعديل الكود الأصلي:
red . bold ( 'Error!' ) ;
bold ( `I'm ${ red ( `da ba ${ underline ( "dee" ) } da ba` ) } daa` ) ;اختياريا ، يمكنك إعادة كتابة نفس الرمز لجعله أقصر وأنظف:
red . bold `Error!` ;
bold `I'm ${ red `da ba ${ underline `dee` } da ba` } daa` ; - import pico from 'picocolors';
+ import pico from 'ansis'; ANSIS متوافق تمامًا مع أنماط picocolors وأسماء الألوان ، لذلك لا تحتاج إلى تعديل الكود الأصلي:
pico . red ( pico . bold ( 'text' ) ) ;
pico . red ( pico . bold ( variable ) ) ;
// colorize "Error: file not found!"
pico . red ( 'Error: ' + pico . cyan ( pico . bold ( 'file' ) ) + ' not found!' ) ;اختياريا ، يمكنك إعادة كتابة نفس الرمز لجعله أقصر وأنظف:
import { red , cyan } from 'ansis' ;
red . bold `text` ;
red . bold ( variable ) ;
// colorize "Error: file not found!"
red `Error: ${ cyan . bold `file` } not found!` - const c = require('ansi-colors');
+ const c = require('ansis'); ANSIS متوافق تمامًا مع أنماط ansi-color وأسماء الألوان ، لذلك لا تحتاج إلى تعديل الكود الأصلي:
c . red . bold ( 'Error!' ) ;
// colorize "Error: file not found!"
c . red ( `Error: ${ c . cyan . bold ( 'file' ) } not found!` ) ;اختياريا ، يمكنك إعادة كتابة نفس الرمز لجعله أقصر وأنظف:
import { red , cyan } from 'ansis' ;
red . bold ( 'Error!' ) ; // using parentheses
red . bold `Error!` ; // using template string
// colorize "Error: file not found!"
red `Error: ${ cyan . bold `file` } not found!` ; - import { red, green, yellow, cyan } from 'kleur';
+ import { red, green, yellow, cyan } from 'ansis'; ANSIS متوافق تمامًا مع أنماط kleur وأسماء الألوان ، لكن Kleur v3.0 لم يعد يستخدم بناء جملة على غرار الطباشير (getter السحرية):
green ( ) . bold ( ) . underline ( 'this is a bold green underlined message' ) ;
yellow ( `foo ${ red ( ) . bold ( 'red' ) } bar ${ cyan ( 'cyan' ) } baz` ) ; إذا كنت تستخدم طرقًا بالسلاسل ، فهذا يتطلب تعديل رمز بسيط. فقط استبدال (). مع . :
green . bold . underline ( 'this is a bold green underlined message' ) ;
yellow ( `foo ${ red . bold ( 'red' ) } bar ${ cyan ( 'cyan' ) } baz` ) ;اختياريا ، يمكنك إعادة كتابة نفس الرمز لجعله أقصر وأنظف:
yellow `foo ${ red . bold `red` } bar ${ cyan `cyan` } baz` ; - const clc = require('cli-color');
+ const clc = require('ansis'); Ansis متوافق* مع أنماط cli-color وأسماء الألوان:
clc . red . bold ( 'Error!' ) ;
// colorize "Error: file not found!"
clc . red ( `Error: ${ c . cyan . bold ( 'file' ) } not found!` ) ; تحذير
لا يدعم ANSIS نمط blink ، لأنه غير مدعوم على نطاق واسع ولا يستخدمه أحد.
تحقق من رمزك وإزالة نمط blink :
- clc.red.blink('text');
+ clc.red('text'); إذا كنت تستخدم وظائف ANSI 256 COLOR xterm أو bgXterm ، فيجب استبدالها بـ ansi256 fn أو bgAnsi256 bg :
- clc.xterm(202).bgXterm(236)('Orange text on dark gray background');
+ clc.ansi256(202).bgAnsi256(236)('Orange text on dark gray background');اختياريا ، يمكنك إعادة كتابة نفس الرمز لجعله أقصر وأنظف:
import { red , cyan , fg , bg } from 'ansis' ;
red . bold `Error!` ;
// colorize "Error: file not found!"
red `Error: ${ cyan . bold `file` } not found!` ;
fg ( 202 ) . bg ( 236 ) `Orange text on dark gray background` ; سيقوم npm run test بتشغيل الوحدة والتكامل.
npm run test:coverage الاختبارات بالتغطية.
ISC
تعتمد الألوان المدعومة على المحطة الفعلية. ↩ ↩ 2 ↩ 3
تدعم محطة Windows اللون الحقيقي منذ مراجعة Windows 10 14931 (2016-09-21). ↩ ↩ 2