我正在用 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
我正在尝试最小化一些棱角分明的脚本,但由于某种原因,uglify会无限期地挂起。如果我将JSHint添加到任务列表中,它将运行良好并完成,然后挂在uglify上。
这是我的Gruntfile:
module.exports = function (grunt) {
// Project configuration
grunt.initConfig({
// make node configuration available for use
pkg: grunt.file.readJSON('package.json'),
// configure uglify
uglify: {
options: {
mangle: false
},
my_target: {
dist: {'dist/test.min.js': ['src/test.js']}
}
},
// configure JSHint
jshint: {
app: ['src/*.js']
}
});
// load pluginsng
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
// default
grunt.registerTask('default', ['jshint', 'uglify']);
grunt.registerTask('uglify', ['uglify']);
};
Run Code Online (Sandbox Code Playgroud)
这是我使用的版本:
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-jshint": "~0.11.2",
"grunt-contrib-uglify": "~0.9.1"
}
Run Code Online (Sandbox Code Playgroud)
我跑了grunt -v,在jshint完成后,它将永远输出:
Running "uglify" task
Running "uglify" task
Running …Run Code Online (Sandbox Code Playgroud) 我有应用程序代码结构,其中js文件分布在多个文件夹中.我们可以创建grunt uglify任务,以便将缩小的文件放在与src相同的文件夹中,或者将它放在/ dist下与src相同的文件夹下,这将以递归方式扫描应用程序中的所有src js文件.
在html中,我们必须包含所有js文件,但是希望保持正常的js用于开发和调试目的,并在测试和部署时缩小.它有更好的选择,所以我不必每次都更改main.html.
uglify: {
options: {
report: 'min',
mangle: false
},
controllers: {
files: {
'src/main/webapp/app/controllers/dist/controllers.min.js': ['src/main/webapp/app/controllers/*.js', '!src/main/webapp/app/controllers/dist/*.js']
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是uglify任务,但我希望它以递归方式查看src/main/webapp/app/for*.js文件中的所有文件夹和子文件夹,并在同一位置创建*.min.js.
我有一个我正在开发的webapp,它使用HTML + Javascript(Angular 1.5.0)+ CSS的前端.当我在本地主机上运行时,网站运行良好.我有一个/index.html文件.这个文件导入我的javascript代码,如下所示:<script src="/app/app.js"></script>
但现在我刚刚使用Grunt实现了自动linting,uglifying等.Grunt非常好地将我的单个Javascript文件(/app/app.cs)转换为minnified one(/dist/js/app.min.js).我改变了我/index.html对包括minnified的Javascript来代替:<script src="/dist/js/app.min.js"></script>.但现在应用程序停止工作.在浏览器的开发控制台中,我看到以下错误:
angular.js:68 Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:unpr] Unknown provider: a
http://errors.angularjs.org/1.5.0/$injector/unpr?p0=a
at http://127.0.0.1:8080/bower_components/angular/angular.js:68:12
at http://127.0.0.1:8080/bower_components/angular/angular.js:4397:19
at getService (http://127.0.0.1:8080/bower_components/angular/angular.js:4550:39)
at injectionArgs (http://127.0.0.1:8080/bower_components/angular/angular.js:4574:58)
at Object.invoke (http://127.0.0.1:8080/bower_components/angular/angular.js:4596:18)
at runInvokeQueue (http://127.0.0.1:8080/bower_components/angular/angular.js:4497:35)
at http://127.0.0.1:8080/bower_components/angular/angular.js:4506:11
at forEach (http://127.0.0.1:8080/bower_components/angular/angular.js:321:20)
at loadModules (http://127.0.0.1:8080/bower_components/angular/angular.js:4487:5)
at createInjector (http://127.0.0.1:8080/bower_components/angular/angular.js:4409:19)
http://errors.angularjs.org/1.5.0/$injector/modulerr?p0=raptorApp&p1=Error%…F%2F127.0.0.1%3A8080%2Fbower_components%2Fangular%2Fangular.js%3A4409%3A19)
Run Code Online (Sandbox Code Playgroud)
为什么正常的Javascript文件可以正常工作,但Grunt缩小的文件不会?我该如何解决?