L'obtention de Facebook est react.js bibliothèque JSX syntaxe de jouer gentiment avec jslint?
Je joue avec le Facebook du react.js de la bibliothèque. Je suis en train d'utiliser leur JSX syntaxe qui décrit la création d'une vue de la façon suivante.
/** @jsx React.DOM */
var HelloMessage = React.createClass({
render: function() {
return <div>{'Hello ' + this.props.name}</div>;
}
});
React.renderComponent(<HelloMessage name="John" />, mountNode);
JSLint n'est évidemment pas comme cela ("on attend d'un identifiant et plutôt vu' <';" - JavaScript erreur de syntaxe), alors comment puis-je obtenir autour de ce dans mon .jshintrc fichier?
- Vous n'avez pas. Il n'est pas valide JavaScript, donc, naturellement JS les outils d'analyse statique peut pas y faire face. Vous devez modifier JSLint/JSHint pour ajouter cette fonctionnalité.
- Ya vous avez raison. Les gars de maintenir les pensions de titres pourrait créer un fork de jshint.
Vous devez vous connecter pour publier un commentaire.
(mise à jour: ce poste est à partir de 2013 et aujourd'hui obsolète)
- Je utiliser JSHint + JSX.
Il ne devrait pas exiger une fourchette de JSHint, il devrait y avoir une façon de dire JSHint pour désactiver toutes les mises en garde d'un bloc de code. Malheureusement, il n'existe aucun moyen de désactiver tous avertissements, seulement un ensemble de mises en garde, afin que je puisse finir de soumettre une demande d'extraction pour ajouter cet, ou de modifier les linters de. Mise à jour: Nous avons soumis une demande d'extraction qui a été accepté.
Comme vous l'avez noté le flux Facebook et Instagram utilisation est à de la poussière en dehors de l'IDE à partir de la ligne de commande.
Votre autre option est d'extraire tous vos JSX modèles dans leurs propres fichiers, et de les rendre une fonction de l'étendue de la place de l'existant à l'intérieur d'un implicite portée lexicale. Nous l'avons essayé et n'aime pas la quantité de texte standard.
(Je ne suis pas affiliés avec le Réagissent de l'équipe)
ignore:start
: voir l'explication.J'ai essayé de suivre Dustin est et STRML de l' des conseils sur ce fil, et voici ce qui a fonctionné le mieux pour moi.
Développement De Configuration
J'utilise Sublime Text avec SublimeLinter + SublimeLinter-jshint + SublimeLinter-jsxhint.
Ce sont de très belle plugins que permettez-moi de voir des erreurs lorsque j'enregistre le fichier, les deux pour JS et JSX fichiers:
Ces plugins respect de votre projet
.jshintrc
et je ne peux pas le recommander assez.Assurez-vous de suivre les instructions d'installation pour tous les trois paquets, ou ils ne fonctionnent pas:
Installation SublimeLinter est simple (instructions);
SublimeLinter-jshint mondiale
jshint
dans votre système (instructions);SublimeLinter-jsxhint mondiale
jsxhint
dans votre système, ainsi que JavaScript (JSX) bundle à l'intérieur dePackages/JavaScript
(instructions).Vous pouvez configurer le linter pour exécuter toutes les quelques secondes, sur fichier enregistrer, ou manuellement.
Étape de génération, Commit Hook, etc
Nous utilisons JSHint dans le cadre de notre workflow Git et comme une étape de génération d'appliquer les lignes directrices. Nous aurions pu utiliser jsxhint mais nous voulions garder à l'aide de grunt-contrib-jshint ce n'était pas une option.
Droit maintenant, nous sommes en cours d'exécution normale
jshint
comme une étape de génération aprèsreact
de transformation, et donc les processus de la sortie JS fichiers.Ce serait cool si quelqu'un fourchue grunt-contrib-jshint et fait une version qui fonctionne avec
jsxhint
, mais il ne me semble pas une tâche facile pour moi. (Mise à jour: quelqu'un fait mais je n'ai pas testé.)En ignorant les Violations au Code Généré
JSX compilateur génère du code qui rompt un peu de nos conventions.
Je ne voulais pas utiliser de
ignore:start
etignore:end
comme suggéré par Dustin car ce serait effectivement désactiver tous peluchage à l'intérieur derender
méthodes. C'est une mauvaise idée dans mon livre. Par exemple, en excluantrender
méthode de peluchage fait linter crois que je ne vais pas utiliser certaines des bibliothèques et de l'enfant composants que je déclare avecrequire
en haut du fichier. Par conséquent, la nécessité d'ignorer les choses se propage à partirrender
méthode pour le reste du fichier, et cela va à l'encontre de l'objectif deignore:start
complètement.Au lieu de cela, j'ai choisi de décorer chaque
render
méthode avec trois JSHint options JSX compilateur (actuellement) des pauses pour moi:Cela est suffisant dans mon cas; pour votre
.jshintrc
, cela peut nécessiter quelques aménagements.JsxHint et JSHint arent les meilleurs outils pour peluchage JSX. JSHint ne prend pas en charge JSX et tous les JsxHint ne se transforme JSX, puis exécute JSHint sur la transformée de code.
J'ai été en utilisant (et vous recommande fortement) ESLint avec le Réagir plugin. C'est mieux depuis Eslint peut analyser n'importe quel Javascript saveur en utilisant des analyseurs comme esprima-fb ou babel-eslint (voir la mise à jour ci-dessous).
Échantillon
.eslintrc
fichier:Mise à JOUR
esprima-fb sera bientôt obsolète par Facebook. Utilisation babel-eslint comme un analyseur syntaxique pour eslint. Un bon endroit pour en savoir plus sur comment vous pouvez configurer Babel & Eslint de travailler avec de Réagir est ce projet Github.
ignore
hacks. ESLint fait analyse le code correctement et a un support pour un beaucoup plus ES6/ES7 caractéristiques de démarrage. C'est un meilleur projet et j'ai changé dans mon propre travail.Voir JSXHint, un wrapper autour de JSHint, j'ai écrit que les peluches de la sortie de
react-tools
. C'est un ignorant, un bloc de lignes qu'il sera en fait de la charpie le javascript généré.Il peut être utilisé avec Sublime Text via SublimeLinter avec ce plugin.
Gars de maintenir les pensions de titres sont incroyablement utile. Vous avez juste à lancer il a jeté le JSX transformer pour produire du javascript valide à moins que quelqu'un crée une fourchette de jshint. Si il y a suffisamment d'intérêt, il pourrait être mis sur la feuille de route pour la prochaine version de réagir cadre. Peut regarder la coversation fil ici.
- Je utiliser grunt + réagissent-outils + jshint à de la poussière de la .fichiers js construit à l'aide de réagir-outils. La sortie de réagir-outils est très bon sur la tenue de votre espace, de l'indentation, etc, lors de la conversion de votre .jsx pour .js, il vous donne une exacte du fichier à de la poussière contre.
À l'installation, installer grunt la façon normale. Puis installer grunt-contrib-montre, réagissent-outils, grunt-réagir, et grunt-contrib-jshint.
voici un exemple de grunt fichier:
Dans ce fichier, l'exécution de "grunt" compiler votre .jsx pour .js et ensuite les peluches .js fichiers. Vous pouvez exécuter "grunt de la montre" pour exécuter après chaque sauvegarde.
La plupart de mes habituels .jshintrc paramètres de travail lors de l'exécution de cette manière. J'ai rencontré quelques problèmes au départ, mais la plupart ont été résolus par faire des changements dans votre .jsx fichiers. Pour exapmle, j'ai "newcap" la valeur true. Quand j'ai suivi le Réagir tutoriel convention de nommage et en majuscule la première lettre de balises, c'jeta un chiffon en erreur. Il a été fixé par la baisse du corps de la première lettre de balises.
J'ai dû mettre "fin": false dans mon .jshintrc. Le résultant .js fichiers ont de fuite des espaces où il convertit les balises Javascript. Je n'ai pas compris si il y est une réaction-outils de configuration pour changer cela. Vous pouvez utiliser la méthode décrite dans Dan post si vous ne voulez pas changer votre .jshintrc.
En plus de peluchage, ce processus permet également de traiter les problèmes avec votre .jsx pour .js conversion.
La question/chute avec ce processus est que vous ne pouvez pas les peluches .jsx fichiers dans l'éditeur. Mais en gardant une fenêtre de terminal ouverte que vous pouvez voir lors de l'édition est un utile de remplacement. Uing TMUX avec Vim et Grunt dans différents volets est ma manière préférée de l'utilisation de ce.
Amey réponse est bonne mais pourrait aussi être mis à jour aujourd'hui:
Paire de eslint et eslint-plugin-réagir désormais en charge es6+jsx+de réagir, de façon babel-eslint est nécessaire que si vous utilisez des choses spécifiques comme des propriétés de la classe, décorateurs, async/await, types.
Exemple .eslintrc de configuration pour réagir+jsx+es6 sans babel-eslint:
Vous pouvez juste regarder eslint-plugin-réagir instructions pour plus de détails/informations.