14

Angular と Browserify を使用してプロジェクトを構築しようとしています。私のcontrollers.jsファイルは次のようになります...

'use strict';

module.exports.testController = function($scope){
    $scope.message = 'Controller 1';
    console.log( 'hello' );
};

ご想像のとおり、これにより 3 つのリンティング エラーが生成されます。

  • Strict の関数形式を使用する
  • 「モジュール」が定義されていません
  • 「コンソール」が定義されていません

このようにファイルの先頭に配置することで、JSHint が Node.js ファイルを処理できるようにする少しの解決策を見つけました。jslint node: true

   /*jslint node: true */
   'use strict';

    module.exports.testController = function($scope){
        $scope.message = 'Controller 1';
        console.log( 'hello' );
    };

ただし、明らかに修正が多すぎます。「console.log(...)」はまだ定義されていないはずです。

BrowserifyでJSHintを使用する方法を知っている人はいますか?

4

2 に答える 2

30

バージョン2.5.3以降、JSHint はbrowserifyフラグをサポートしています。

すべてのフラグと同様に、ソース ファイルで直接使用できます。

/*jshint browserify: true */
// browserify code here

または、ファイルに追加し.jshintrcます。

{
   "browserify": true
}
于 2014-08-03T14:17:00.993 に答える
3

私は自分の質問に答えるのが嫌いです。それは盗みのように感じますが、それにもかかわらず、ここに答えがあります. この特定の猫の皮を剥ぐにはいくつかの方法がありますが、おそらくこの解決策が最も「正しい」ものです...


.jsintrc を変更する

最初にすべきことは、.jshintrc を変更することです。

"globals": {
    "define": false
}

になる

"globals": {
    "define": false,
    "module": false
}

コードを変更する

次のようにコードを変更する必要があります

module.exports = (function(){

    'use strict';

    var myComponent = {};

    myComponent.testController = function($scope){

        $scope.message = 'hello';
        console.log( 'Hello' );

    };

    myComponent.testDirective= function($scope){

        $scope.message = 'hello';
        console.log( 'Hello' );

    };

    return myComponent;

}());

JSHint は linting エラーを表示しますが、 では表示console.logしませんmodules。これは修正の.jshintrcおかげです。

use strictlinting エラーは、すべてのコードを関数にラップすることで修正されました。


必要とする()

これをさらに一歩進めると、browserify を使用しているため、require(). そのため、もう一度変更する必要があり.jshintrcます。

"globals": {
    "module": false,
    "require": false
}

注:defineグローバルは使用していないため、グローバルから削除しました。

于 2014-01-29T14:25:35.467 に答える