Ci sono un paio di soluzioni disponibili (a parte Petah's ...):
- Uso UglifyJS2 conditional compilation:
È possibile utilizzare la --define (-d) Interruttore in ordine per dichiarare le variabili globali che UglifyJS assumerà come costanti (a meno che non siano definite nell'ambito ). Ad esempio se si passa --define DEBUG = falso allora, insieme con il codice morti UglifyJS rimozione scarterà il seguente dalla uscita:
if (DEBUG) {
console.log("debug stuff");
}
UglifyJS avvertirà sulla condizione essendo sempre falsa e circa cadere irraggiungibile codice; per ora non vi è alcuna opzione per disattivare solo questo avviso specifico, è possibile passare warnings = false per disattivare tutti gli avvisi .
Un altro modo per farlo è dichiarare i globali come costanti in un file separato e includerlo nella compilazione. Per esempio si può avere un file build/defines.js con il seguente:
const DEBUG = false;
const PRODUCTION = true;
// etc.
and build your code like this:
uglifyjs costruire/defines.js js/foo.js js/bar.js ... -c UglifyJS volontà avviso le costanti e, dal momento che non possono essere alterate, sarà valutare i riferimenti ad esse al valore stesso e rilasciare il codice irraggiungibile come al solito. L'eventuale svantaggio di questo approccio è che la build conterrà le dichiarazioni const.
- Utilizzare una funzione wrapper.
Per esempio si dispone di questo metodo:
exports.complicatedMethod = function (arg1, arg2, arg3) {
stuff...
};
si aggiunge la registrazione ad esso avvolgendolo in una funzione logger:
function logger(fn) {
if (!DEBUG) {
return fn;
}
return function() {
console.log(fn.name, arguments); // You can also use `fn.toString()` to get the argument names.
fn.apply(this, arguments);
};
}
exports.complicatedMethod = logger(function (arg1, arg2, arg3) {
stuff...
});
In questo modo l'unico calo di prestazioni sarebbe in fase di avvio tempo. È inoltre possibile utilizzare AOP metodo con l'funzione wrapper sopra:
exports.complicatedMethod = function (arg1, arg2, arg3) {
stuff...
};
if (DEBUG) {
for (var name in exports) {
exports[name] = logger(exports[name]);
}
}
E si può passare informazioni al logger aggiungendo le proprietà alla funzione:
exports.complicatedMethod.description = 'This function only shows how tired i was when I was writing it and nothing else!';
si può avere uno sguardo a this question dove qualcuno codice creato che crea un logger per le funzioni in un oggetto in modo ricorsivo. Controlla anche this answer of mine.
- Utilizzare C Pre Processor.
si può semplicemente fare qualcosa di simile:
#if DEBUG
console.log("trace message");
#endif
o qualcosa di simile
#if DEBUG
#define DEBUG_LOG(x) console.log(x);
#else
#define DEBUG_LOG(x) //console.log(x);
#endif
Poi si può fare questo nel codice
DEBUG_LOG('put a random message her to confuse sys admins!')
O si utilizza è npm warapper: laudanumscript
- Creare un sweetjs macro.
Non sono stato in grado di trovare la compilazione condizionale con sweetjs, ma sono sicuro che non sarebbe troppo difficile implementarlo. La sintassi di fine sarebbe (o dovrebbe essere!) Simile a cpp.
https://github.com/duongchienthang/js -logger – Believe2014