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 を 2 回実行します。
ソース(上記)のjshintはうまく機能しますが、uglifyがいくつかのセミコロンを削除したため、jshintポスト「ビルド」は失敗したようです。
私のうなり声ファイルの関連部分(参照用):
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.registerTask('default', [
'jshint:source',
'concat:scriptsCommon',
'uglify:all',
'jshint:dist'
jshint:source
扱いはうまくいきますが、そうでjshint:dist
はなく、セミコロンの欠落について不平を言います。
醜いスクリプト(参照用)は次のとおりです。
!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 にセミコロンの問題を無視させますが、また、それを残すために醜くなっています。
どんな助けでも感謝します!
乾杯、テリー