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.
