Как вы используете JSHint и Browserify вместе?

Я пытаюсь создать проект, используя Angular и Browserify. Мой файл controllers.js выглядит так...

'use strict';

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

Как и следовало ожидать, это генерирует три ошибки линии.

  • Используйте форму функции Strict
  • 'module' не определен
  • 'console' не определен

Я нашел немного решения здесь, которое позволяет 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(...)' все равно должен быть undefined.

Кто-нибудь знает, как использовать JSHint с Browserify?

Ответ 1

Начиная с версии 2.5.3 JSHint поддерживает флаг browserify.

Как и все флаги, вы можете использовать его непосредственно в исходном файле:

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

Или добавьте его в файл .jshintrc:

{
   "browserify": true
}

Ответ 2

Я ненавижу отвечать на свои вопросы, это похоже на кражу, но, тем не менее, вот ответ. Есть несколько способов скинуть этот конкретный кот, но это решение, вероятно, является наиболее "правильным"...


Изменить .jshintrc

Первое, что вам нужно сделать, это изменить ваш .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 покажет ошибки перевязки для console.log, но не для modules. Это любезно предоставлено .jshintrc.

Ошибка use strict linting исправлена, когда я завербовал весь код в функции.


требуют()

Сделав это еще дальше, поскольку мы используем браузер, нам также понадобится require(). Поэтому мне нужно изменить .jshintrc еще раз.

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

Примечание. Я удалил define из глобальных таблиц, потому что я его не использую.