В процессе работы сборщика модулей возникают диагностические сообщения, формируемые на этапах трансформации и бандлинга кода. Они включают ошибки синтаксиса, предупреждения о неиспользуемых переменных, сообщения плагинов и результаты анализа зависимостей. Внутренний формат этих сообщений структурирован и предназначен для машинной обработки, тогда как конечный вывод требует преобразования в человекочитаемый вид.
Функция esbuild.formatMessages() выполняет
преобразование массива диагностических объектов в текстовые строки с
учётом контекста, типа сообщения и параметров форматирования. Она
используется тогда, когда стандартный вывод esbuild не применяется
напрямую, а требуется ручной контроль над представлением ошибок и
предупреждений.
Каждое сообщение, поступающее в formatMessages,
представляет собой объект с фиксированным набором полей:
text — основное описание ошибки или предупреждения
location — информация о позиции в исходном коде
notes — дополнительные уточнения, вложенные сообщения
pluginName — имя плагина, сформировавшего сообщение
detail — расширенные технические данные (в зависимости от источника)
Пример структуры:
{
text: "Unexpected token",
location: {
file: "src/index.js",
line: 12,
column: 8,
lineText: "const a = ",
length: 1
},
notes: [
{
text: "Parsing failed here"
}
],
pluginName: "js-parser"
}
Такая структура позволяет точно локализовать проблему и дополнительно описывать контекст возникновения ошибки.
esbuild.formatMessages(messages, options)
Функция принимает массив сообщений и объект настроек, возвращая массив строк.
Определяет тип сообщений, подлежащих форматированию:
"error" — ошибки"warning" — предупрежденияРазделение важно, поскольку esbuild хранит ошибки и предупреждения раздельно, и форматирование может отличаться по стилю вывода.
Управляет использованием ANSI-цветов в выводе:
true — включение цветного выводаfalse — отключение цветовЦвета используются для выделения:
В средах CI обычно применяется color: false для
предотвращения вывода управляющих символов.
Определяет ширину виртуального терминала для форматирования:
Значение особенно важно при выводе в лог-файлы или нестандартные терминалы.
esbuild.formatMessages() преобразует структурированные
сообщения в многострочный текст, включающий:
^)Типичный результат:
src/index.js:12:8: error: Unexpected token
const a =
^
Parsing failed here
Форматирование ориентировано на быстрое визуальное восприятие причины ошибки без необходимости ручного разбора структуры объекта.
Разделение error и warning влияет на
семантику вывода:
При использовании formatMessages выбор kind
влияет на стилизацию и префиксы сообщений, что важно при унифицированном
логировании.
При работе с esbuild.transform() результат может
содержать массив errors и warnings, которые
изначально представлены в сыром формате:
const result = await esbuild.transform(code, {
loader: "js"
});
Дальнейшая обработка:
const formatted = await esbuild.formatMessages(result.errors, {
kind: "error",
color: false,
terminalWidth: 80
});
Такой подход позволяет отделить этап анализа от этапа представления, что особенно полезно в системах с кастомным логированием.
В esbuild.build() сообщения доступны через результат
сборки:
const result = await esbuild.build({
entryPoints: ["src/index.js"],
outfile: "dist/bundle.js",
bundle: true
});
Форматирование предупреждений:
const warnings = await esbuild.formatMessages(result.warnings, {
kind: "warning",
color: true,
terminalWidth: 100
});
Такой подход часто применяется при интеграции esbuild в собственные CLI-инструменты, где требуется контроль над выводом.
Поле notes используется для расширения контекста ошибки.
При форматировании оно выводится как дополнительный блок под основным
сообщением.
Особенности:
Пример:
src/app.js:20:5: error: Missing semicolon
console.log("test")
^
Note: This expression is part of a larger statement
Параметр terminalWidth влияет на визуальную структуру
вывода:
При значениях ниже стандартных (например, 40–60 символов) формат становится более вертикальным, что упрощает чтение в узких логах.
При color: true применяются ANSI
escape-последовательности:
В средах без поддержки ANSI цвет автоматически отключается или игнорируется, но структура сообщения сохраняется.
Использование esbuild.formatMessages() характерно для
следующих архитектур:
В таких случаях esbuild используется как вычислительный слой, а форматирование переносится на уровень приложения.
После вызова formatMessages возможны дополнительные
преобразования:
Пример группировки:
const grouped = formatted.reduce((acc, msg) => {
const file = msg.split(":")[0];
acc[file] = acc[file] || [];
acc[file].push(msg);
return acc;
}, {});
Плагины esbuild могут генерировать собственные сообщения, которые
полностью совместимы с formatMessages. Поле
pluginName добавляет контекст происхождения ошибки, что
критично при сложной цепочке трансформаций.
При наличии нескольких плагинов форматирование сохраняет последовательность источников, не теряя связи между этапами обработки.
Если массив сообщений пуст:
Это позволяет безопасно вызывать formatMessages без
предварительных проверок.
Функция оптимизирована для обработки больших массивов сообщений:
При больших сборках (тысячи сообщений) основное влияние на производительность оказывает не форматирование, а генерация самих сообщений esbuild.