Elm:
Запись в стандартный поток ошибок
Как это сделать:
Elm работает в Интернете, и браузеры не различают stdout и stderr так, как это делают интерфейсы командной строки. Однако можно симулировать stderr с помощью взаимодействия с JavaScript через порты. Вот как это настроить:
port module Main exposing (..)
import Html
-- Определите порт для отправки сообщений об ошибках в JavaScript
port stderr : String -> Cmd msg
-- Функция для имитации записи в stderr
writeToStdErr : String -> Cmd msg
writeToStdErr message =
stderr message
main =
writeToStdErr "Ошибка: Что-то пошло не так"
|> Html.programWithFlags { init = \_ -> ((), Cmd.none), update = \_ _ -> ((), Cmd.none), view = \_ -> Html.text "", subscriptions = \_ -> Sub.none }
И соответствующий JavaScript:
var app = Elm.Main.init();
// Прослушивайте ошибки на порту 'stderr' и логируйте их в консоль как ошибки
app.ports.stderr.subscribe(function(message) {
console.error(message);
});
Пример вывода в консоль браузера:
Ошибка: Что-то пошло не так
Подробнее
Исторически stderr является концепцией Unix, где потоки вывода категоризированы для лучшего контроля процессов и автоматизации. Elm, будучи в первую очередь языком для фронтенда, не имеет встроенной поддержки этой концепции, поскольку веб-приложения обычно обрабатывают ошибки в пользовательском интерфейсе или через сетевые операции, а не через терминал. Альтернативы для отладки в Elm включают использование Elm Debugger, который визуально представляет состояние вашего приложения. За портами Elm’s JavaScript interop создает сообщения, на которые подписывается JavaScript, по сути, преодолевая разрыв между Elm и традиционным stderr.
Смотрите также
- Официальное руководство Elm по портам: https://guide.elm-lang.org/interop/ports.html
- Elm Debugger: https://guide.elm-lang.org/effects/debugging.html
- Запись кросс-платформенных stdout и stderr в Node.js: https://nodejs.org/api/console.html