Запись в стандартный поток ошибок

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.

Смотрите также