grunt-jsxhint и jsxhint не действуют одинаково
Когда я использую npm install -g jsxhint
Я могу использовать его, чтобы скрыть мой код JSX, например, так:
Но когда я пытаюсь использовать grunt-jsxhint
чтобы настроить команду lint, она терпит неудачу:
Мой Gruntfile очень прост:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-jsxhint');
/* Project configuration */
grunt.initConfig({
options: {
jshintrc: '.jshintrc',
ignores: [],
additionalSuffixes: ['.js', '.ios.js']
},
jshint: {
all: ['./app/index.ios.js']
}
});
/* Test Tasks */
grunt.registerTask('test', ['jshint']);
};
Почему они дают разные результаты?
2 ответа
JsxHint и JSHint не являются лучшими инструментами для раскрашивания JSX. JSHint не поддерживает JSX, и все, что делает JsxHint - это преобразовывает JSX, а затем запускает JSHint для преобразованного кода. Я использовал (и очень рекомендую) ESLint с плагином React. Это лучше, так как Eslint может анализировать любой вкус Javascript с помощью пользовательских анализаторов (например, esprima-fb)
Образец .eslintrc
файл:
{
"parser": "esprima-fb",
"env": {
"browser": true,
"node": true
},
"rules": {
"no-mixed-requires": [0, false],
"quotes": [2, "single"],
"strict": [1, "never"],
"semi": [2, "always"],
"curly": 1,
"no-bitwise": 1,
"max-len": [1, 110, 4],
"vars-on-top": 0,
"guard-for-in": 1,
"react/display-name": 1,
"react/jsx-quotes": [2, "double", "avoid-escape"],
"react/jsx-no-undef": 2,
"react/jsx-sort-props": 0,
"react/jsx-uses-react": 1,
"react/jsx-uses-vars": 1,
"react/no-did-mount-set-state": 2,
"react/no-did-update-set-state": 2,
"react/no-multi-comp": 0,
"react/no-unknown-property": 1,
"react/prop-types": 2,
"react/react-in-jsx-scope": 1,
"react/self-closing-comp": 1,
"react/wrap-multilines": 2
},
"ecmaFeatures": {
"jsx": true
},
"plugins": [ "react" ],
"globals": {
"d3": true,
"require": "true",
"module": "true",
"$": "true",
"d3": "true"
}
}
Я понял, что случилось с моим Gruntfile.
Вам нужно загрузить задачу в: grunt.loadNpmTasks('grunt-jsxhint');
После grunt.initConfig({})
был установлен.
Это будет выглядеть так:
module.exports = function(grunt) {
/* Project configuration */
grunt.initConfig({
options: {
jshintrc: '.jshintrc',
ignores: [],
additionalSuffixes: ['.js', '.ios.js']
},
jshint: {
all: ['./app/index.ios.js']
}
});
grunt.loadNpmTasks('grunt-jsxhint');
/* Test Tasks */
grunt.registerTask('test', ['jshint']);
};