2015-10-02 19 views
5

In C#, si può fare #if DEBUG ... per fare qualcosa di speciale durante il debug. Mi piacerebbe fare una cosa simile in Typescript in modo da poter impostare i valori del modulo durante il test.Definizione del preprocessore in Typescript

Qualcuno ha qualche suggerimento su come implementarlo in Typescript?

Il migliore che ho elaborato è una classe impostazioni:

export class Settings { 
    static isDebugging = false; 
}; 

Poi quando si avvia l'applicazione, ho impostato a true.

Quindi nel codice, importare la classe e verificare se è vero o no.

if (Settings.isDebugging)... 

Sembra funzionare bene.

risposta

1

Se si desidera ottenere qualcosa di simile alle direttive #if da C#, sarà necessario creare qualcosa che rimuove un determinato codice quando viene creata l'applicazione.

Per fare ciò, ci sono alcuni plugin di build che è possibile utilizzare. Ci sono alcuni plugin build (vedi here e here) che metterà a nudo il codice che è all'interno di commenti come questo al momento della compilazione:

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

Tuttavia, utilizzando questi plugin si potrebbe fare un errore di ortografia di test-code o end-test-code causandoti di lasciare il codice di prova in produzione. Non otterrai un errore di compilazione a riguardo.

Per questo motivo, probabilmente è meglio trovare un plug-in di compilazione che rimuova una funzione in base al suo nome (vedere here, purtroppo per questo non riesco a trovare un plug-in per il gulp). In questo modo si potrebbe scrivere qualcosa di simile:

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

quindi utilizzarlo:

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

e poi dire lo script di build per togliere l'utilizzo di tale funzione quando non è un accumulo di produzione.

Nel complesso, tuttavia, la semplice soluzione di controllare un booleano è sufficiente.

2

Flag come #if DEBUG non sono disponibili in TypeScript perché l'output di compilazione è sempre lo stesso. In C# durante la compilazione in modalità di debug i file DLL includono alcune informazioni aggiuntive per il debug. Nella modalità di rilascio le informazioni vengono omesse e i file DLL sono più chiari.

Se si utilizza un ambiente di compilazione automatica come Gulp o Grunt è possibile memorizzare le impostazioni in una cartella come /config/debug/config.ts e /config/release/config.ts quindi è possibile creare due attività:

One per il debug:

$ gulp bundle-debug 

E uno per il rilascio

$ gulp bundle-release 

Per copiare un file o un altro.

+1

Questa è una buona risposta. –

1

V'è un codice che aggiunge il supporto per direttiva del preprocessore in dattiloscritto: https://github.com/Microsoft/TypeScript/issues/4691

Tuttavia è in discussione se essa diventerà una parte del dattiloscritto corretto. Fino ad allora la soluzione alternativa è principalmente quella di utilizzare strumenti di compilazione esterni o diverse opzioni di configurazione (quali codice strip in fase di compilazione) e variabili magiche (che disabilitano solo i percorsi di codice in fase di esecuzione)

Problemi correlati