Forbehandlerdefinisjoner i Typescript


I C# kan du gjøre #if DEBUG... for å gjøre noe spesielt under debugging. Jeg ønsker å gjøre noe lignende i Typescript slik at jeg kan sette skjema-verdier når jeg tester.

Noen har noen forslag til hvordan man kan implementere dette i Typescript?

Det beste jeg har kommet opp med er en innstillingsklasse:

export class Settings {
    static isDebugging = false;
};

Så når jeg starter appen, setter jeg den til sann.

Deretter i koden importerer jeg klassen og sjekker om det er sant eller ikke.

if (Settings.isDebugging)...

Ser ut til å fungere greit.

Svar #1

Hvis du vil oppnå noe lignende #if-direktiver fra C#, må du lage noe som fjerner viss kode når applikasjonen din bygges.

For å gjøre det, finnes det noen bygge-plugins du kan bruke. Det finnes noen bygge-plugins (se her og her) som vil fjerne kode som er innenfor kommentarer som dette under bygging:

/* test-code */
removeMeInProduction();
/* end-test-code */

Men ved å bruke disse pluginene kan du gjøre en feil i stavemåten av test-code eller end-test-code, noe som kan føre til at testkode blir liggende igjen i produksjon. Du får ikke en kompilasjonsfeil på grunn av det.

På grunn av dette er det sannsynligvis bedre å finne en byggeplugin som fjerner en funksjon basert på navnet dens (se her—dessverre kan jeg ikke finne en gulp-plugin for dette). På den måten kunne du skrevet noe som dette:

function ifNotProduction(func: () => void) {
    func();
}

Bruk det da:

ifNotProduction(() => {
    console.log("Only run when test.");
});

Og deretter fortell byggeskriptet å fjerne bruken av den funksjonen når det ikke er en produksjonsbygg.

Alt i alt, er din enkle løsning med bare å sjekke en boolean god nok.

Svar #2

Flagg som #if DEBUG er ikke tilgjengelige i TypeScript fordi kompilasjonsoutputen alltid er den samme basert på innstillingene (den kan ikke endres betinget). I C# når du kompilerer i debug-modus inkluderer DLL-filene litt ekstra informasjon for feilsøking. I release-modus utelates den informasjonen, og DLL-filene blir lettere.

Hvis du bruker et automatisert bygge-miljø som Gulp eller Grunt, kan du lagre innstillingene dine i en mappe som /config/debug/config.ts og /config/release/config.ts, og deretter kan du lage to oppgaver:

En for feilsøking:

gulp bundle-debug

Og en for utgivelse

gulp bundle-release

Å kopiere en fil eller en annen.

Relaterte artikler