如何在编译/缩小过程中消除JavaScript中不必要的调试代码?

如何在编译/缩小过程中消除JavaScript中不必要的调试代码?,javascript,debugging,minify,Javascript,Debugging,Minify,我曾经在JavaScript应用程序中编写过很多调试代码,我正在寻找一种技术,可以在编译/缩小过程中去除调试代码 JavaScript世界中是否存在C/C++中编译指令的等价物 在C/C++中,它如下所示: #ifdef _DEBUG counter++; #endif 注:目前,我使用gulp我认为您尝试使用任务运行程序(如grunt或gulp)来完成。这两个工具都是一个任务运行程序,可以使用插件转换代码来执行这种操作 这种所谓的“插件”就是。此插件正在执行您要求的操作:) 要进一步了解gu

我曾经在JavaScript应用程序中编写过很多调试代码,我正在寻找一种技术,可以在编译/缩小过程中去除调试代码

JavaScript世界中是否存在C/C++中编译指令的等价物

在C/C++中,它如下所示:

#ifdef _DEBUG
counter++;
#endif

注:目前,我使用gulp

我认为您尝试使用任务运行程序(如
grunt
gulp
)来完成。这两个工具都是一个任务运行程序,可以使用插件转换代码来执行这种操作

这种所谓的“插件”就是。此插件正在执行您要求的操作:)


要进一步了解gulp,您可以访问该网站或在web上找到一些好的教程…

我认为您正在尝试使用任务运行程序(如
grunt
gulp
)来完成。这两个工具都是一个任务运行程序,可以使用插件转换代码来执行这种操作

这种所谓的“插件”就是。此插件正在执行您要求的操作:)


有关gulp的更多了解,您可以访问该网站或在web上找到一些好的教程…

strip debug

从JavaScript代码中剥离控制台、警报和调试器语句

用于确保没有在生产代码中留下任何日志记录

也可作为大口/咕噜/花椰菜插件提供

用法

$ 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;}   
吞咽时使用

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'));
});  

有关更多详细信息,请检查此项:,以及与gulp一起使用的此项:

strip debug

从JavaScript代码中剥离控制台、警报和调试器语句

用于确保没有在生产代码中留下任何日志记录

也可作为大口/咕噜/花椰菜插件提供

用法

$ 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;}   
吞咽时使用

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'));
});  

有关更多详细信息,请查看以下内容:,这一项用于gulp:

可能是学术性的,但这里有一个答案是纯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
可能有副作用,将进行评估。通过这种方式,我们保证断言中的表达式永远不会在生产代码中进行计算,优化编译器可以安全地将断言作为死代码删除。

可能是学术性的,但这里有一个答案是纯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
可能有副作用,将进行评估。这样,我们可以保证断言中的表达式永远不会在生产代码中求值,优化编译器可以安全地将断言作为死代码删除。

如何缩小、连接代码?你可以在BuffSerI化中实现一个转换,例如可以删除<代码>控制台。log < /Cord>,但是这取决于你认为是调试代码。@ ZHE取决于你使用的是哪一个微控制器。例如,使用
grunt
可以使用
strip code
任务。如果使用
gulp
作为任务执行者,则可以使用
strip code
任务。您可以安装
npm strip debug
插件,并将任务添加到gulpfile中。我认为
grunt
也有这个选项。如何缩小、连接代码?你可以在BuffSerI化中实现一个转换,例如可以删除<代码>控制台。log < /Cord>,但是这取决于你认为是调试代码。@ ZHE取决于你使用的是哪一个微控制器。例如,使用
grunt
可以使用
strip code
任务。如果使用
gulp
作为任务执行者,则可以使用
strip code
任务。您可以安装
npm strip debug
插件,并将任务添加到gulpfile中。我想,
grunt
也有这个选项。谢谢!gulp预处理看起来非常强大。然而,对于我的任务,它有很多冗余的特性。既然如此,解决我的问题的最好方法就是使用类似于条带代码的东西(可用于咕噜和咕噜)。它很简单,完全符合我的要求。谢谢!gulp预处理看起来非常强大。然而,对于我的任务,它有很多冗余的特性。既然如此,解决我的问题的最好方法就是使用类似于条带代码的东西(可用于咕噜和咕噜)。它很简单,完全符合我的要求。gulp-strip-debug很好。然而,我使用的是AngularJS和gulp strip debug,不幸的是,在这种情况下什么都不做。我找不到AnglarJS应用程序的好替代品。gulp-strip-debug很好。然而,我使用的是AngularJS和gulp strip debug,不幸的是,在这种情况下什么都不做。我找不到AnglarJS应用程序的好替代品。