
一个小的快速节点库,用于在终端输出中应用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,色彩,kleur,ansi-colors,kolorist,cli-color,colors-cli,colors.js
✅比较功能?比较包装尺寸基准
chalk colorette picocolors ansi-colors的倒入替代品import 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 --colorn时,在end of line正确样式断开String.prototypeNestjs,Facebook/Stylex,续集,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和PICOLORS慢。与许多其他图书馆不同,只有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或CONCORJS语法导入默认模块或命名颜色。
// 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,色彩,颜色等)都不支持嵌套模板字符串。
嵌套模板字符串:
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 } %` }
` ;输出: 
颜色和样式具有许多受欢迎的库中使用的标准名称,例如粉笔,色彩,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别名: greygray美国拼写 | bgBlackBright别名: bgGreybgGray我们的拼写 | reset |
redBright | bgRedBright | |
greenBright | bgGreenBright | |
yellowBright | bgYellowBright | |
blueBright | bgBlueBright | |
magentaBright | bgMagentaBright | |
cyanBright | bgCyanBright | |
whiteBright | bgWhiteBright |
默认情况下,导入的ansis实例包含基本样式和颜色。为了扩展使用自定义颜色名称的基本颜色,请使用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' ) ;用打字稿的用法示例:
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)
如果您在不支持的trueColor或256种颜色的端子中使用hex() , rgb()或ansis256()函数,则颜色将被插值。

您可以使用每种样式的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类包含方法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 -1600万颜色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 Environment变量,然后在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 Level-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 to to to to colose colors和--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()该方法是否支持ANSI颜色和样式,它返回boolean值。
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 | |||
| 特拉维斯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 | truecolor | |
| 视窗 终端 | ✅ | ✅ | ✅2 | |||
| 视窗 Powershell | ✅ | ✅ | ✅2 | |||
| MacOS终端 | ✅ | ✅ | XTerm-256Color | |||
| iterm | ✅ | ✅ | ✅ | XTerm-256Color | truecolor | |
| 终端模拟器小猫 | ✅ | ✅ | ✅ | xterm-kitty | ||
| 终端模拟器KDE Konsole | ✅ | ✅ | ✅ | x-term-direct |
参见:
运行命令以查看各种库的某些功能的支持:
npm run compare
| 图书馆 ________________ - 命名导入 - 命名颜色 | ANSI 16颜色 | ANSI 256 颜色 | 真的 颜色 | 被束缚 句法 | 嵌套 模板字符串 | 新的 线 | 颜色的后备 | 支持 env vars 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 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 |
下载尺寸: NPM软件包的GZZ尺寸。
打开包装的大小: node_modules/ DIRECTORY (incl. dependencies)中NPM软件包的大小。
代码大小:将通过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
MacOS红杉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不支持链式的语法或正确的样式中断(在字符串中使用`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.4倍。
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/seccolorette中用于单一样式的基准。
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/secpicocolors基准测试,稍作修改。通过将两种样式应用于彩色单词而不是一个样式来增加一些复杂性。
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 10修订版14931(2016-09-21),Windows终端支持真实颜色。 ↩2