保留“调试器”关键字 grunt uglify

Cam*_*uez 2 javascript grunt-contrib-uglify

我正在用 JS 开发一个库,我想在使用 grunt-contrib-uglify 后保留“debugger”关键字,因为这是有意使用的,但默认行为(显然)是删除所有调试器。

我的咕噜声文件:

module.exports = function (grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            CrackerTrapProductionMinJS: {
                options:{
                    banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
            '<%= grunt.template.today("yyyy-mm-dd") %> */\n',
                drop_console: true,
                mangle: {
                    reserved: ['debugger']
                  }
                },
                files: {
                    './build/cracker-trap.min.js': './build/cracker-trap.ob.js'
                }
            }
        },          
    });

    grunt.loadNpmTasks('grunt-contrib-uglify');

    grunt.registerTask('default', ['uglify']);
};
Run Code Online (Sandbox Code Playgroud)

我想保留调试器关键字来验证用户是否打开了开发人员工具的方法:

function timeValidation() {
    var startTime = new Date();
    debugger;
    var endTime = new Date();

    return endTime - startTime > 100;
}
Run Code Online (Sandbox Code Playgroud)

完整代码位于: https: //github.com/bioverflow/cracker-trap

Ice*_*kle 5

看起来您只需compressgrunt-contrib-uglify设置部分中指定选项对象,然后设置为 false,如下drop_debugger所示

所以你的设置应该是这样的:

uglify: {
  CrackerTrapProductionMinJS: {
    options:{
      banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> */\n',
      drop_console: true,
      compress: {
        drop_debugger: false
      },
      files: {
        './build/cracker-trap.min.js': './build/cracker-trap.ob.js'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然我没有运行 gulp,但我无法验证