Schrijven naar standaardfout

Elm:
Schrijven naar standaardfout

Hoe:

Elm draait op het web, en browsers maken geen onderscheid tussen stdout en stderr zoals command-line interfaces dat doen. Je kunt echter stderr simuleren met behulp van JavaScript-interoperabiliteit via poorten. Zo stel je het in:

port module Main exposing (..)

import Html

-- Definieer een poort om foutmeldingen naar JavaScript te sturen
port stderr : String -> Cmd msg

-- Functie om het schrijven naar stderr te simuleren
writeToStdErr : String -> Cmd msg
writeToStdErr message =
    stderr message

main =
    writeToStdErr "Fout: Er is iets misgegaan"
    |> Html.programWithFlags { init = \_ -> ((), Cmd.none), update = \_ _ -> ((), Cmd.none), view = \_ -> Html.text "", subscriptions = \_ -> Sub.none }

En de bijbehorende JavaScript:

var app = Elm.Main.init();

// Luister naar fouten op de 'stderr'-poort en log ze als fouten in de console
app.ports.stderr.subscribe(function(message) {
    console.error(message);
});

Voorbeelduitvoer in de browserconsole:

Fout: Er is iets misgegaan

Uitdieping

Historisch gezien is stderr een Unix-concept waarbij uitvoerstromen worden gecategoriseerd voor betere procescontrole en automatisering. Elm, voornamelijk een frontend-taal, heeft geen ingebouwde ondersteuning voor dit concept aangezien webapplicaties typisch fouten afhandelen binnen de UI of via netwerkoperaties, niet via een terminal. Alternatieven voor debuggen in Elm omvatten het gebruik van de Elm Debugger, die visueel de staat van je applicatie presenteert. Achter de poorten construeert Elm’s JavaScript-interoperabiliteit berichten waarop JavaScript abonneert, waardoor in wezen de kloof tussen Elm en traditionele stderr wordt overbrugd.

Zie Ook