2

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 にセミコロンの問題を無視させますが、また、それを残すために醜くなっています。

どんな助けでも感謝します!

乾杯、テリー

4

1 に答える 1

1

JSHint は、uglified/concat の出力ではなく、入力だけで実行する必要があると思います。JSHint は人的エラーを根絶するための構文チェッカーであり、uglify は明らかにファイル サイズを最小限に抑えようとします。

JSHint.comから:

JSHint は、JavaScript コードのエラーや潜在的な問題を検出し、チームのコーディング規則を適用するためのコミュニティ主導のツールです...このプロジェクトの目標は、JavaScript 開発者がタイプミスや言語の問題を心配することなく複雑なプログラムを作成できるようにすることです。

明らかにこれは、uglify タスクとそれがコードに加える変更に多くの信頼を置く必要があることを意味します。ただし、醜いコードで単体テストを実行すると (それらがあると仮定して)、信頼性が向上し、問題が特定されます。

于 2014-01-21T13:32:41.710 に答える