2015-10-02 13 views
5

W języku C# można zrobić #if DEBUG ... aby zrobić coś specjalnego podczas debugowania. Chciałbym zrobić coś podobnego w maszynopisie, aby ustawić wartości formularzy podczas testowania.Preprocessor Definiuje w Maszynopisie

Ktoś ma jakieś sugestie, jak wdrożyć to w Maszynopisie?

Najlepszym Mam wymyślić to klasa ustawienia:

export class Settings { 
    static isDebugging = false; 
}; 

Następnie podczas uruchamiania aplikacji, ustawić go na true.

Następnie w kodzie importuję klasę i sprawdzam, czy jest prawdziwa, czy nie.

if (Settings.isDebugging)... 

Wydaje się działać poprawnie.

Odpowiedz

1

Jeśli chcesz osiągnąć coś podobnego do dyrektyw #if z C#, będziesz musiał stworzyć coś, co usunie określony kod, gdy twoja aplikacja zostanie zbudowana.

Aby to zrobić, można użyć kilku wbudowanych wtyczek. Istnieje kilka wtyczek budowlanej (patrz here i here), który obetnie kod, który jest w komentarzach, jak to w czasie kompilacji:

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

Jednak za pomocą tych wtyczek można popełnić błąd w pisowni test-code lub end-test-code powodując pozostawienie kodu testowego w produkcji. Nie dostaniesz błędu kompilacji na ten temat.

Z tego powodu prawdopodobnie lepiej jest znaleźć wtyczkę do budowania, która usuwa funkcję opartą na nazwie (patrz here - niestety nie mogę znaleźć wtyczki do tego celu). W ten sposób można napisać coś takiego:

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

Następnie użyj go:

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

A potem powiedz skrypt gromadzeniu się rozebrać na korzystanie z tej funkcji, gdy nie jest to build produkcji.

Ogólnie rzecz biorąc, proste rozwiązanie polegające na sprawdzeniu wartości boolowskiej jest wystarczająco dobre.

2

Flagi takie jak #if DEBUG są niedostępne w TypeScript, ponieważ dane wyjściowe kompilacji są zawsze takie same. W języku C# po kompilacji do trybu debugowania pliki DLL zawierają dodatkowe informacje do debugowania. W trybie zwolnienia informacje te są pomijane, a pliki DLL są jaśniejsze.

Jeśli używasz zautomatyzowanym środowisku kompilacji jak Gulp lub Grunt można przechowywać ustawienia w folderze jak /config/debug/config.ts i /config/release/config.ts następnie można utworzyć dwa zadania:

jeden dla debugowania:

$ gulp bundle-debug 

I jeden do wydania:

Aby skopiować jeden lub drugi plik.

+1

To także dobra odpowiedź. –

1

Jest to kod, który dodaje wsparcie dla dyrektywy preprocesora w maszynopisie: https://github.com/Microsoft/TypeScript/issues/4691

Jednak to jest przedmiotem dyskusji, czy będzie ona stać się częścią maszynopis właściwego. Do tego czasu obejście tego problemu polega głównie na użyciu zewnętrznych narzędzi kompilacji lub różnych opcji konfiguracji (które kodują paski w czasie kompilacji) i zmiennych magicznych (które wyłączają ścieżki kodu w czasie wykonywania).