
ไลบรารี Node.js ขนาดเล็กและเร็วสำหรับการใช้สีและสไตล์ ANSI ในเอาต์พุตเทอร์มินัล
ANSIS มีคุณสมบัติทั้งหมดที่คุณต้องการคุณสามารถเปรียบเทียบกับไลบรารีที่คล้ายกัน
Ansis เร็วกว่า ชอล์ก และ picocolors (ในบางกรณีการใช้งาน) ดูเกณฑ์มาตรฐาน

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:
ชอล์ก, picocolors, colorette, kleur, ansi-colors, kolorist, cli-color, colours-cli, colours.js
✅เปรียบเทียบคุณสมบัติ? เปรียบเทียบมาตรฐานแพ็คเกจ
chalk colorette picocolors ansi-colorsimport ansis, { red, bold, ansi256, hex } from 'ansis'red.bold.underline('text')red`Error: ${blue`file.js`} not found!`dim bold italic underline strikethroughred`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 และธง --no-color --colorend of line เมื่อใช้ n ในสตริงString.prototypeNestjs, Facebook/stylex, Sequelize, Salesforce, OCLIF, WebPackBar
หากคุณค้นพบข้อผิดพลาดหรือมีข้อเสนอแนะคุณสมบัติโปรดสร้างปัญหาเกี่ยวกับ GitHub
วันนี้สองห้องสมุดที่เล็กที่สุดและเร็วที่สุดคือ ansis และ picocolors ทั้งสองได้รับการแนะนำโดยชุมชนเครื่องมือ ES เป็นสิ่งทดแทนที่ดีที่สุดสำหรับห้องสมุดที่มีอายุมากกว่า
picocolors : 6.4 kb - ห้องสมุดไมโครที่มีคุณสมบัติพื้นฐานเท่านั้นаnsis 7.4 kb - ห้องสมุดที่ทรงพลังที่มีคุณสมบัติทั้งหมดที่คุณต้องการchalk : 44.2 KB - ให้ฟังก์ชั่นที่คล้ายกันกับ ANSIS แต่มีขนาดใหญ่กว่าpicocolors : เร็วที่สุดเมื่อใช้สไตล์เดียว (เช่น red เท่านั้น)аnsis : เร็วที่สุดเมื่อใช้สองรูปแบบขึ้นไป (เช่น red + bgWhite )chalk : ช้ากว่าทั้ง ANSIS และ picocolors ในทุกกรณีการใช้งาน มีเพียง ansis , chalk และ picocolors เท่านั้นที่ได้รับการดูแลอย่างแข็งขันซึ่งแตกต่างจากห้องสมุดอื่น ๆ อีกมากมาย:
colorette : อัปเดตล่าสุดเมื่อ 2 ปีที่แล้วansi-colors : อัปเดตล่าสุดเมื่อ 3 ปีที่แล้วkleur : อัปเดตล่าสุดเมื่อ 2 ปีที่แล้วcli-color : อัปเดตล่าสุด ~ 1 ปีที่ผ่านมาcolors-cli : อัปเดตล่าสุดเมื่อ 1 ปีที่แล้วcolors.js : อัปเดตล่าสุด 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, colour.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 } %` }
` ; เอาท์พุท: 
สีและสไตล์มีชื่อมาตรฐานที่ใช้โดยห้องสมุดยอดนิยมมากมายเช่นชอล์ก, colorette, picocolors, kleur
| สีหน้า | สีพื้นหลัง | รูปแบบ |
|---|---|---|
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นามแฝง: greyการสะกดคำ gray สหรัฐ | bgBlackBrightนามแฝง: bgGreybgGray us spelling | reset |
redBright | bgRedBright | |
greenBright | bgGreenBright | |
yellowBright | bgYellowBright | |
blueBright | bgBlueBright | |
magentaBright | bgMagentaBright | |
cyanBright | bgCyanBright | |
whiteBright | bgWhiteBright |
ค่าเริ่มต้น ansis ซ์ 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()ถูกนำมาใช้เพื่อเข้ากันได้กับchalkAPI
ดูรหัสสี 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() ฟังก์ชั่นในเทอร์มินัลที่ไม่รองรับ trueColor หรือ 256 สีจะมีการแก้ไขสี

คุณสามารถใช้รหัส Escape ANSI ด้วยคุณสมบัติแบบ 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 ปิดการใช้งานสี
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 ถูกใช้โดย emulators เทอร์มินัลเพื่อระบุการรองรับสี ค่าของมันอาจแตกต่างกันไปขึ้นอยู่กับตัวจำลองเทอร์มินัลและระดับการรองรับสีที่ให้ไว้
ค่าที่ใช้กันทั่วไปสนับสนุนโดย ansis :
truecolor หรือ 24bit - 16 ล้านสีansi256 - ANSI 256 สีansi - 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 ของคุณเพื่อให้แน่ใจว่าผลการทดสอบจะเหมือนกันโดยไม่คำนึงถึงระดับสีที่รองรับในสภาพแวดล้อมและเทอร์มินัลที่แตกต่างกัน
Level-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 :
#!/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 สี | จริง สี | env. ภาคเรียน | env. คัลเลท | ตัวแปร Env โดยเฉพาะ |
|---|---|---|---|---|---|---|
| Azure CI | โง่ | tf_build agent_name | ||||
| GitHub CI | โง่ | ci, github_actions | ||||
| Gittea CI | โง่ | CI, gitea_actions | ||||
| Gitlab CI | โง่ | CI, gitlab_ci | ||||
| Travis CI | โง่ | เทรวิส | ||||
| PM2 ไม่ใช่ istty | ✅ 1 | ✅ 1 | ✅ 1 | โง่ | pm2_home PM_ID | |
| Jetbrains TeamCity > = 2020.1.1 | teamcity_version | |||||
| ไอเดีย Jetbrains | Xterm-256Color | terminal_emulator = 'jetbrains-jediterm' | ||||
| รหัส VS | Xterm-256Color | สีเทา | ||||
| หน้าต่าง เทอร์มินัล | ✅ 2 | |||||
| หน้าต่าง PowerShell | ✅ 2 | |||||
| เทอร์มินัล Macos | Xterm-256Color | |||||
| Iterm | Xterm-256Color | สีเทา | ||||
| คิตตี้เครื่องจำลองเทอร์มินัล | xterm-kitty | |||||
| เครื่องจำลองเทอร์มินัล Kde Konsole | xterm |
ดูเพิ่มเติม:
เรียกใช้คำสั่งเพื่อดูการสนับสนุนของคุณสมบัติบางอย่างโดยไลบรารีต่างๆ:
npm run compare
| ห้องสมุด - - ชื่อนำเข้า - การตั้งชื่อสี | Ansi 16 สี | Ansi 256 สี | จริง สี | ถูกล่ามโซ่ ไวยากรณ์ | ซ้อนกัน สายแม่แบบ | ใหม่ เส้น | ทางกลับกันเป็นสีสัน | การสนับสนุน env vars CLI Flags |
|---|---|---|---|---|---|---|---|---|
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)สีเทา
ชื่อวิธี:
chalk:hex()rgb()ansis:hex()rgb()ไวยากรณ์ที่ถูกล่ามโซ่
lib.red.bold('text')สตริงเทมเพลตซ้อนกัน
lib.red`text ${lib.cyan`nested`} text`สายใหม่
แก้ไขสไตล์การแบ่งที่end-of-linelib.bgGreen(`First Line Next Line`);
| แพ็คเกจ NPM | ดาวน์โหลด Tarball Size | ขนาดที่ไม่ได้บรรจุ | ขนาดรหัส |
|---|---|---|---|
picocolors | 2.6 kb | 6.4 kb | 2.6 kb |
ansis | 3.8 kb | 7.4 kb | 3.4 kb |
colorette | 4.9 kb | 17.0 kb | 3.4 kb |
kleur | 6.0 kb | 20.3 kb | 2.7 kb |
ansi-colors | 8.5 kb | 26.1 kb | 5.8 kb |
kolorist | 8.7 kb | 51.0 kb | 6.8 kb |
colors.js | 11.0 kb | 39.5 kb | 18.1 kb |
chalk | 13.1 kb | 43.7 kb | 16.4 kb |
cli-color | 13.8 (216 KB) | 39.6 (754 KB) | 12.1 kb |
colors-cli | 361.7 KB | 511.0 kb | 8.7 kb |
ขนาดดาวน์โหลด: ขนาด 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ในการวัดประสิทธิภาพใช้ Benchmark.js
คำเตือน
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 สูงสุด 64GB
MacOS Sequoia 15.1
node.js v22.11.0
เทอร์มินัลiTerm2v3.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การใช้เพียง 2 รูปแบบ 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 ช้ากว่า ANSIS 2 เท่า
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 สไตล์ picocolors จะช้ากว่า ANSIS 3.4x
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 ไม่ได้ใช้ไวยากรณ์สไตล์ชอล์กอีกต่อไป (Magical 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 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 Revision 14931 (2016-09-21) ↩ 2