[英]How to get rid of unnecessary debugging code in JavaScript during the compilation/minification process?
我曾经在JavaScript应用程序中编写过很多调试代码,而我正在寻找一种技术,该技术可以在编译/缩小过程中消除调试代码。
JavaScript World中是否有与C / C ++等效的编译指令?
在C / C ++中,它看起来像这样:
#ifdef _DEBUG
counter++;
#endif
PS。 目前,我用口水
我认为您可以使用任务运行器(例如grunt
或gulp
执行您要尝试的操作。 这两个工具都是一个任务运行程序,可以使用插件转换您的代码以执行这种操作。
这种所谓的“插件”就是gulp-preprocess 。 这个插件可以满足您的要求:)
要进一步了解gulp,可以访问gulp网站或在网络上找到一些不错的教程...
条调试
从JavaScript代码中删除控制台,警报和调试器语句
对于确保您没有在生产代码中保留任何日志非常有用。
也可以作为gulp / grunt / broccoli插件使用。
用法
$ npm install --save strip-debug
var stripDebug = require('strip-debug');
stripDebug('function foo(){console.log("foo");alert("foo");debugger;}').toString();
//=> function foo(){void 0;void 0;}
gulp的用法
var gulp = require('gulp');
var stripDebug = require('gulp-strip-debug');
gulp.task('default', function () {
return gulp.src('src/app.js')
.pipe(stripDebug())
.pipe(gulp.dest('dist'));
});
可能是学术性的,但这是一个纯JavaScript的答案。 您可以使用类似的方法从代码中完全剥离某些功能,并且根据您的编译器,它们将编译为空。
/** @const */
var NDEBUG = false; // change to true for production
var assert = (() => NDEBUG ? () => {}: test => console.assert(test(), test.toString()))();
如果NDEBUG == true
则assert成为一个空函数: () => {}
,否则,如果NDEBUG == false
,它将一个函数作为参数,调用该函数并测试结果。
用法:
var divideByResult = function (a, b) {
assert (() => b() !== 0);
return a() / b();
}
这就像一个C风格的断言。 仅当NDEBUG == false
才会调用assert中的函数。 我们传递一个函数来断言而不是表达式。 如果我们传递一个表达式,则表达式b() !== 0
可能会有副作用,并且将被求值。 这样,我们保证断言中的表达式永远不会在生产代码中求值,并且优化的编译器可以安全地将断言删除为无效代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.