
Небольшая и быстрое библиотека 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:
Мел, Picocolors, Corelette, Kleur, Ansi-Colors, Kolorist, Cli-Color, Colors-cli, Colors.js
✅ Сравните функции? Сравните тесты размеров пакетов
ansi-colors падения picocolors chalk coloretteimport ansis, { red, bold, ansi256, hex } from 'ansis'red.bold.underline('text')red`Error: ${blue`file.js`} not found!`strikethroughdim bold italic underlinered`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, Scielize, Salesforce, Oclif, WebPackbar
Если вы обнаружили ошибку или имеете предложение функции, не стесняйтесь создавать проблему на GitHub.
Сегодня две самые маленькие и самые быстрые библиотеки - это ansis и picocolors . Оба рекомендуются ES Tooling Community как лучшие замены для более старых, объемных библиотек.
picocolors : 6,4 КБ - микро библиотека с основными функциями.аnsis : 7,4 КБ - мощная библиотека, содержащая все необходимые вам функции.chalk : 44,2 КБ - обеспечивает аналогичную функциональность для 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') так и Template Literals 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, Corelette, Colors.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 } %` }
` ; Выход: 
Цвета и стили имеют стандартные названия, используемые многими популярными библиотеками, такими как мела, Corelette, 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 Us Правописание | 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()реализованы для совместимости с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 цветах, то цвета будут интерполированы.

Вы можете использовать коды побега 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 Disable Colors
FORCE_COLOR=1 Force Включить цвета
См. Стандартное описание по 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 256ansi - основные цвета 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 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 level-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 |
|---|---|---|---|---|---|---|
| Azure CI | ✅ | тупой | Tf_build Agent_Name | |||
| GitHub CI | ✅ | ✅ | ✅ | тупой | CI, github_actions | |
| Gittea ci | ✅ | ✅ | ✅ | тупой | CI, gitea_actions | |
| Гитлаб CI | ✅ | тупой | Ci, gitlab_ci | |||
| Трэвис CI | ✅ | тупой | Трэвис | |||
| PM2 не istty | ✅ 1 | ✅ 1 | ✅ 1 | тупой | Pm2_home pm_id | |
| JetBrains TeamCity > = 2020.1.1 | ✅ | ✅ | Teamcity_version | |||
| Идея реактивного сустава | ✅ | ✅ | ✅ | XERM-256Color | Terminal_emulator = 'jetbrains-jediterm' | |
| Против кода | ✅ | ✅ | ✅ | XERM-256Color | TrueColor | |
| Окна Терминал | ✅ | ✅ | ✅ 2 | |||
| Окна PowerShell | ✅ | ✅ | ✅ 2 | |||
| MacOS терминал | ✅ | ✅ | XERM-256Color | |||
| iterm | ✅ | ✅ | ✅ | XERM-256Color | TrueColor | |
| Эмулятор терминала Котти | ✅ | ✅ | ✅ | XERM-Kitty | ||
| Эмулятор терминала KDE Konsole | ✅ | ✅ | ✅ | XERM-Direct |
Смотрите также:
Запустите команду, чтобы увидеть поддержку некоторых функций различными библиотеками:
npm run compare
| Библиотека ________________ - названный импорт - Название цветов | ANSI 16 цветов | ANSI 256 цвета | Истинный Цвет | В цепи синтаксис | Вложенное шаблонные струны | Новый Линия | ПРИКЛАДКА В ЦВЕТЫ | Поддержка Env Vars Кли -флаги |
|---|---|---|---|---|---|---|---|---|
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 |
Примечание
Названный импорт
Эсм
import { red, green, blue } from 'lib';
CJS
const { red, green, blue } = require('lib');Наименование цветов
- Стандарт
bgRedBrightцвета имеютbgRedназвания, например:red,redBright- Нестандартный : в цветах есть либеральные имена, например:
brightRed,bgBrightRed,red_b,red_bttANSI 256 Colors
Названия методов:
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 | Скачать размер тарбола | Распакованный размер | Код размер |
|---|---|---|---|
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 КБ |
Размер скачивания: размер GZIPD в пакете NPM.
Распаковый размер: размер пакета NPM в node_modules/ Directory (incl. dependencies) .
Размер кода : размер распределенного кода, который будет загружен с помощью require или import в ваше приложение.
Смотрите также:
git clone https://github.com/webdiscus/ansis.git
cd ./ansis
npm i
npm run demoДля измерения производительности используется bender.js.
Предупреждение
vitest benchmark генерирует ложные/ нереальные результаты.
Например, результаты простой скамейки:
chalk.red('foo') - 7.000.000 ops/sec
ansis.red('foo') - 23.000.000 ops/sec (x3 faster is WRONG result)
Фактические результаты производительности мела и ANSI в этом тесте очень похожи.
git clone https://github.com/webdiscus/ansis.git
cd ./ansis
npm i
npm run build
npm run benchПротестировано на
MacBook Pro 16 "M1 Max 64 ГБ
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, Corelette и 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 на 2 раза медленнее, чем 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 стилей PicoColors становится в 3,4 раза медленнее, чем 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 Clarkmark, слегка модифицированный. Добавлен немного больше сложности, применяя два стиля к цветному слову вместо одного.
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 поддерживает True Color со времен Windows 10 Revision 14931 (2016-09-21). ↩ ↩ 2