2015-10-02 24 views
5

c#では、デバッグ時に特別な処理を行うために#if DEBUG ...を実行できます。 Typescriptで同様のことをしたいので、テスト時にフォーム値を設定することができます。プリプロセッサはTypescriptで定義します

これをTypescriptでどのように実装するかについてのご意見はありますか?

私が出ている最高のは、設定クラスです:アプリを起動するときに

export class Settings { 
    static isDebugging = false; 
}; 

はその後、私はこれをtrueに設定します。

コードでは、クラスをインポートして、それが真であるかどうかを確認します。

if (Settings.isDebugging)... 

問題なく動作するようです。

答えて

1

C#の#ifディレクティブに類似したものを実現するには、アプリケーションのビルド時に特定のコードを削除する必要があります。

これを行うには、使用できるビルドプラグインがいくつかあります。これらのプラグインを使用することにより、あなたはtest-codeまたはend-test-codeのスペルを間違えことができ、しかし

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

:いくつかは、ビルド時にこのようなコメント内にあるコードを除去しますプラグイン(herehereを参照)構築があります。テストコードを本番環境に残すことができます。あなたはそれについてのコンパイルエラーを取得しません。

このため、名前に基づいて機能を削除するビルドプラグインを見つけるほうがよいでしょう(here - 残念ながら、このためにgulpプラグインは見つかりません)。あなたはこのような何か書くことができたの方法:

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

そして、それは生産ビルドではありませんとき、その関数の使用を取り除くためにビルドスクリプトを教えて:

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

は、次にそれを使用しています。

全体的には、ブール値をチェックするだけの簡単な解決策で十分です。

2

#if DEBUGのようなフラグは、コンパイル出力が常に同じであるため、TypeScriptでは使用できません。 C#では、デバッグモードにコンパイルするときに、DLLファイルにデバッグ用の追加情報が含まれています。リリースモードでは、情報は省略され、DLLファイルはより軽い。

あなたは、あなたが二つのタスクを作成することができ/config/debug/config.ts/config/release/config.tsなどのフォルダの下に設定を保存することができGruntGulpのような自動化されたビルド環境を使用している場合:デバッグのために

ワン:

$ gulp bundle-debug 

1つはリリース用です

$ gulp bundle-release 

1つのファイルを別のファイルにコピーします。

+1

これも良い答えです。 –

1

活字体にプリプロセッサディレクティブのサポートを追加するコードがあります:それは適切な活字体の一部になる場合、それは議論されているがhttps://github.com/Microsoft/TypeScript/issues/4691

が。それまでは、外部ビルドツールや、コンパイル時にコードを削除するさまざまな設定オプション、(実行時にコードパスを無効にする)魔法の変数を使用することがほとんどでした。

関連する問題