我在这里进行了搜索,并进行了相当长的谷歌搜索,但看不到任何明显的东西,尽管我警告说这是我第一次使用 jshint/uglify 和 grunt。
我有(为了简洁起见)2个测试JS文件:
(function() {
console.log("I'm in your build, testing your stuff (1)");
})();
和
(function() {
console.log("I'm in your build, testing your stuff (2)");
})();
我的 grunt 文件执行了许多构建任务,但基本上我运行 jshint 两次 - 一次在 src 上(如果有问题,请提前停止),然后一次在所有 concat/uglify 上确保最终文件输出仍然通过。
源代码(上图)上的 jshint 很有效,但是 jshint post 'build' 似乎失败了,因为 uglify 删除了几个分号。
我的 grunt 文件的相关部分(供参考):
jshint: {
jshintrc: '.jshintrc',
source: {
files: {
src: ['app/common/scripts/**/*.js',
'app/games/**/*.js'
]
}
},
dist: {
files: {
src: [ 'dist/' + targetEnvironment + '/common/scripts/**/*.js',
'dist/' + targetEnvironment + '/games/**/*.js'
]
}
}
},
concat: {
scriptsCommon: {
src: [ 'app/common/scripts/*.js',
],
dest: 'dist/' + targetEnvironment + '/common/scripts/common.concat.js',
nonull: true
}
},
uglify: {
all: {
files: [
{ src: 'dist/' + targetEnvironment + '/common/scripts/common.concat.js',
dest: 'dist/' + targetEnvironment + '/common/scripts/common.min.js' },
]
}
}
我运行的 grunt 任务本质上是(再次,例如,减少):
grunt.registerTask('default', [
'jshint:source',
'concat:scriptsCommon',
'uglify:all',
'jshint:dist'
jshint:source
工作一种享受,jshint:dist
没有并抱怨缺少分号。
uglify'd 脚本(供参考)是:
!function(){"use strict";angular.module("TestingStuffs",[]).controller("TestController",["$http","$log",function(){}]).controller("Test2Controller",["$http","$log",function(){}])}(),function(){console.log("I'm in your build, testing your stuff (1)")}(),function(){console.log("I'm in your build, testing your stuff (2)")}();
如您所见,两个 console.log 语句都删除了分号 - 看起来很安全。我能理解uglify为什么会这样做,也能理解jshint为什么抱怨它。
理想情况下,我想修改 uglify 以便它保留分号(尽管我可能会因此而激怒分号警察)虽然理想情况下我希望看到两者的选项 - 让 jshint 忽略分号问题,但是也变得丑陋将其留在里面。
任何帮助感激不尽!
干杯,特里