Expérience de débogage moderne première partie


Dans cette série de didacticiels en deux parties, nous examinerons l’écriture et le débogage de code JavaScript à l’aide d’outils modernes tels que Chrome DevTools..

Dans la première partie, vous découvrirez les différents panneaux de l'outil de développement et les flux de travail auxquels ils conviennent. L'accent sera également mis sur l'écriture et l'exécution de code JavaScript via le navigateur plutôt que sur un éditeur de code.. 

1. Que sont les outils de développement du navigateur??

Les outils de développement sont des fonctionnalités fournies par les navigateurs contenant un ensemble d’utilitaires permettant d’inspecter, d’interagir et de déboguer des pages Web. Navigateur DevTools sont généralement fournis avec tous les navigateurs modernes, y compris Chrome, Firefox, Safari, Opera et Internet Explorer. Ce didacticiel se concentrera spécifiquement sur la partie DevTools de Chrome Canary, mais toutes les fonctionnalités répertoriées ici feront probablement partie de Chrome Stable..

Que peuvent offrir DevTools à un développeur JavaScript??

La plate-forme Web ouverte vous permet de Clic droit> Inspecter l'élément sur n'importe quelle page Web et découvrez ses éléments internes, mais JavaScript a toujours été un peu plus inaccessible que CSS (Cascading Style Sheets). Bien que DevTools regorge de fonctionnalités liées au style de la page, il existe également de nombreuses fonctionnalités moins connues qui vous permettent d'afficher, d'écrire et de déboguer JavaScript de différentes manières, que ce soit sur votre propre page ou sur une troisième. site tiers.

Pourquoi utiliser DevTools pour votre flux de travail JavaScript?

Si vous êtes un développeur Web front-end, il est recommandé de connaître au moins les utilitaires JavaScript proposés par DevTools. Les fonctionnalités de haut niveau incluent:

  • au moins deux panneaux dédiés dont les cas d'utilisation traitent presque entièrement de JavaScript
  • un environnement de développement rapide à configurer, avec une boucle de retour rapide
  • capacités de débogage avancées avec points d'arrêt

2. Présentation de DevTools

Cette section couvrira les éléments d'interface utilisateur de DevTools, en particulier le panneau Sources et le panneau Console, car ce sont les deux panneaux qui seront utilisés pour la suite de ce didacticiel..

Interface du panneau des sources

Prenez note de quelques caractéristiques de mise en page:

  • DevTools est dans un état non amarré. Vous pouvez préférer vous asseoir à gauche, en bas ou à droite de la fenêtre principale.
  • Le volet Sources du panneau Sources est sélectionné dans la barre latérale gauche..
  • Les volets de la barre latérale droite sont dans un état développé.

Le panneau Sources fournit un éditeur de code et prend en charge la coloration syntaxique de nombreux formats de fichiers courants tels que HTML, CSS, JavaScript, CoffeeScript, LESS et Sass. L'éditeur de code est présent dans le volet principal. Juste au-dessus du volet principal, vous pouvez voir les onglets correspondant à vos fichiers ouverts..

Dans le volet Sources de la barre latérale gauche, une arborescence de fichiers indique généralement les actifs que la page actuellement inspectée a chargés. Les actifs sont regroupés par domaine et les dossiers peuvent être développés ou réduits. Si vous cliquez sur un élément, il s'ouvrira dans l'éditeur de code..

La barre latérale de droite contient les commandes de débogage JavaScript et chaque volet peut afficher un état développé ou réduit. Différents niveaux de sortie sont affichés ici lorsque JavaScript est suspendu à un point d'arrêt.

Panneau de la console

Le panneau de la console vous permet d’afficher la sortie produite par la journalisation des diagnostics (telle que console.log déclarations), mais aussi d’écrire et d’évaluer JavaScript dans le contexte de la page actuellement inspectée. Le panneau de la console prend en charge l’API de console et l’API de ligne de commande. Voici quelques fonctions exposées par chaque API, avec une description de leur sortie.

API de console

// Une instruction de journal simple, consignant une chaîne, un tableau et un objet console.log ('Hi', [1,2,3], this);
// Identique à console.log mais formaté en rouge pour indiquer une erreur console.error ('Une erreur est survenue');


API de ligne de commande

clés (fenêtre); // Récupère les propriétés d'un objet
0 $; // Récupérer l'élément actuellement sélectionné dans le panneau des éléments


La partie supérieure du panneau de la console contient quelques commandes, comme indiqué ci-dessous..

  • Aucun symbole (cercle avec une barre oblique inverse) efface la console. Ceci est utile lorsque plus de messages que souhaité sont affichés et que vous souhaitez les supprimer. Vous pouvez également utiliser le raccourci Command-K pour les supprimer ou exécuter la fonction clair(), qui fait partie de l'API de ligne de commande.
  • Filtre ouvre une barre avec des contrôles de filtrage comprenant une zone de saisie. Si vous souhaitez uniquement rechercher des messages d'erreur, sélectionnez le les erreurs option de filtrage. Vous pouvez également entrer une expression régulière à utiliser comme filtre..
  • le Sélectionnez le menu () fournit des options pour les contextes d’exécution JavaScript disponibles vers lesquels basculer. Utilisez cette option lorsque vous souhaitez que votre code JavaScript soit évalué dans le contexte d'une extension IFrame ou Chrome, par exemple..

Le panneau de console est l'un des rares panneaux que vous pouvez superposer à d'autres panneaux dans les outils de développement (Elements, Network, Sources) afin d'améliorer le flux de travail. Si vous revenez régulièrement sur le panneau de la console, ouvrez le tiroir de la console en appuyant sur le bouton Échapper clé.

3. Affichage de JavaScript à l'aide de DevTools

Cette section se concentrera sur l’utilisation de DevTools pour afficher les ressources JavaScript utilisées par un site. Avant de continuer, il est recommandé de désactiver le cache du navigateur via DevTools. Pour ce faire, accédez à Paramètres> Général et activez la case à cocher intitulée Désactiver le cache (lorsque DevTools est ouvert). Cela garantit que vous obtenez toujours une nouvelle version d'un actif.

Flux de travail sur des sites tiers

Accédez à HTML5Please.com, un site expliquant la disponibilité des fonctionnalités de la plate-forme Web. Ouvrez les outils de développement à l'aide de Commande-Maj-I ou en sélectionnant Inspecter l'élément dans le menu contextuel de la page. Dirigez vous vers le Panneau de sources et prenez note de l’arborescence de fichiers indiquée dans la barre latérale gauche. Il n’est pas rare que des sites Web stockent leur code JavaScript dans des dossiers tels que "js" ou "scripts", de sorte que vous savez déjà où chercher. Ouvrez le script.js déposer dans le js dossier. Notez quelques fonctionnalités de l'éditeur de code qui peuvent s'avérer utiles lorsque vous affichez ou modifiez du code JavaScript:

  • coloration syntaxique complète
  • numéro de ligne et de colonne du curseur
  • nouvel onglet correspondant au fichier ouvert
  • occurrences de mots associées à la sélection en cours
  • appariement
  • aller à la définition

Utilisez la fonctionnalité de définition pour trouver ou découvrir rapidement des méthodes ou des fonctions JavaScript. Vous pouvez ouvrir la fenêtre modale de définition go-to via le raccourci Commande-Maj-P. Si vous connaissez le nom de la méthode ou de la fonction que vous recherchez, saisissez-le dans le champ de recherche de définition go-to; au fur et à mesure que vous tapez, les résultats seront mis à jour en temps réel. Chaque résultat contient le nom de la méthode correspondante (s'il en existe un) et le numéro de ligne où il est défini. Utilisation Entrer pour sélectionner un résultat de recherche et vous atterrissez ensuite sur la ligne de code où la fonction est définie.

Ouvert modernizr-2.0.min.js dans le js / libs dossier. Le fait que ce fichier soit minifié rend la visualisation plus difficile. Sélectionner Jolie impression Pour que DevTools applique une mise en forme plus intuitive au fichier, en utilisant des sauts de ligne et des indentations. La fonctionnalité Pretty Print fonctionne à la fois pour CSS et JavaScript.

Enregistrer le code JavaScript externe dans le système de fichiers

Chaque fichier JavaScript de l’arborescence de fichiers comporte un menu contextuel. Ouvrez-le à l’aide de clic-droit. Notez quelques options utiles pour mettre le fichier hors ligne pour une utilisation ultérieure.

  • Ouvrir un lien dans un nouvel onglet: utilisez-le si vous souhaitez examiner plus en détail les informations du réseau dans un onglet dédié (via le panneau de réseau).
  • Enregistrer sous: utilisez ceci si vous voulez faire une copie hors connexion du fichier dans votre système de fichiers.
  • Copier l'adresse du lien: utilisez ceci si vous voulez partager l'URL ailleurs.

Trouver du JavaScript dans le panneau de réseau

Le panneau de réseau, en plus de vous montrer simplement quelles ressources une page a été chargée, affichera également d'autres informations et données..

  • Initiateur: ce qui a provoqué le téléchargement d'un script
  • DOMContentLoaded (bleu) et Événements de charge (rouge): représentation visuelle du moment où ces événements se déclenchent sur une ligne de temps
  • Taille: la taille de l'actif, y compris la taille de Gzip

En utilisant HTML5Please.com comme exemple de site Web, suivez les étapes ci-dessous:

  1. Accédez au Panneau de réseau et effacer les journaux.
  2. Actualiser la page.
  3. Filtrez les journaux JavaScript en sélectionnant le Les scripts filtre.

Le premier script, modernizr-2.0.min.js, a la valeur de html5please.com/:17 pour l'initiateur. Cela suggère que c'est une ressource HTML qui a initié le téléchargement du script (plutôt qu'un chargeur de script, par exemple). Cliquez sur l'initiateur pour accéder à la ligne de code du panneau Sources qui fait référence au fichier:

Dans le cas où un script est inséré dynamiquement (avec un chargeur de script par exemple), la colonne initiateur du panneau de réseau peut fournir une pile d'appels JavaScript concernant les appels qui ont eu lieu jusqu'au point où le script a été inséré dynamiquement. dans le DOM.

Vous pouvez cliquer sur chaque appel dans une pile d'appels pour accéder à la partie de code correspondante dans le panneau Sources..

4. Écrire du JavaScript en utilisant les outils de développement

Dans la section "Affichage de JavaScript à l'aide de DevTools", j'ai expliqué comment afficher des informations, des métadonnées et du code source sur des actifs JavaScript. Cette section examinera les façons dont vous pouvez écrire du code JavaScript à l’aide de DevTools..

Panneau de la console

Utilisez le panneau de la console pour écrire des lignes simples JavaScript avec des résultats immédiats. JavaScript est exécuté avec le contexte de la page actuellement inspectée. Exécutez du JavaScript dans le panneau de la console en appuyant sur Entrer après avoir entré du code.

Reportez-vous à l’API de la console et à l’API de ligne de commande pour obtenir une liste des méthodes et fonctions disponibles..

Conseils

Bien que le panneau de la console soit relativement simple, voici quelques conseils pour améliorer votre flux de travail:

  • Utilisation Maj-Entrée pour une nouvelle ligne, cela vous permet d'écrire du code multiligne.
  • Exécuter clés (fenêtre) détecter des variables globales sur la page en cours.
  • Utilisez le $ _ assistant pour récupérer le dernier résultat d'une commande précédente.

Vous constaterez peut-être que le panneau de console est un bon candidat pour expérimenter rapidement JavaScript afin de déterminer le résultat de certaines expressions. Cependant, lorsque vous commencez à écrire du code JavaScript plus complexe, vous pouvez facilement rencontrer des limitations:

  • Le manque de coloration syntaxique peut réduire la lisibilité.
  • L'indentation doit être faite manuellement avec des espaces..
  • Les fonctionnalités manquantes sont généralement présentes dans les éditeurs de code.

La Console Panel n’a pas l’intention de remplacer ni de remplacer un éditeur de code. Voici une liste de cas où le panneau de console peut être utile:

  • utilisation de la fonctionnalité de saisie semi-automatique à des fins de découverte de propriété
  • découvrir la différence entre JavaScript appel() et appliquer() méthodes en les exécutant en ligne et en observant les résultats

Panneau de sources

Le volet principal du panneau Sources contient un éditeur de code doté de fonctionnalités d’édition de base..

CodeMirror

L'éditeur lui-même est alimenté par CodeMirror, un éditeur de texte puissant implémenté à l'aide de JavaScript. DevTools importe l'éditeur CodeMirror dans sa propre base de code et active sélectivement diverses fonctionnalités qui sont ensuite mises à la disposition de tout utilisateur de Chrome..

Lors de la modification de JavaScript (parmi d'autres langues prises en charge), l'éditeur de panneau Sources contient un certain nombre d'utilitaires tels que:

  • Suggestions de saisie semi-automatique: Recevez des suggestions quant au mot que vous essayez peut-être de taper. Celles-ci sont basées sur des propriétés écrites existantes dans le même fichier. Par exemple, document n'est pas suggéré après avoir tapé docu à moins qu'il y ait déjà au moins une occurrence du mot document dans le même dossier.
  • Rechercher et remplacer: Pour ouvrir le champ de recherche, cliquez sur Commande-F. Les résultats correspondants sont décrits dans le code en temps réel. Vérification du Remplacer case à cocher fournit des capacités de recherche et de remplacement.
  • Raccourcis clavier: Il existe différents raccourcis, similaires à ceux trouvés dans les éditeurs de code tels que Sublime Text. Par exemple, utilisez Commander-/ faire un commentaire, Commande-D pour sélectionner l'occurrence suivante du mot actuellement sélectionné, ainsi que de nombreux autres éléments, comme indiqué sur la page des raccourcis officiels de Chrome Developer Tools.

Live Editing JavaScript

Cette fonctionnalité, mieux connue sous le nom de Live Edit, vous permet d’éditer le code JavaScript d’une page via DevTools et d’appliquer immédiatement les modifications à la page sans actualisation de la page. Il n'y a pas d'interface utilisateur particulière pour utiliser cela; il vous suffit de réécrire une partie du code JavaScript et d'appuyer sur Command-S pour le sauver.

La manière dont cela fonctionne en coulisse est expliquée ci-dessous, mais prenons d’abord les conditions préalables suivantes (indépendantes de Live Edit):

  1. Une page qui utilise script.js charge dans Chrome via une page Web.
  2. script.js est analysé, évalué et compilé en code machine via le moteur JavaScript V8.

Voici ce qui se passe dans les coulisses de la fonctionnalité Live Edit, en tenant compte des points précédents:

  1. Vous ouvrez script.js dans l'éditeur de code DevTools. Supposons qu’il existe un bouton sur la page Web actuelle. Lors d’un clic sur un bouton, un écouteur d’événements click exécute une fonction anonyme..
  2. Vous modifiez la fonction anonyme pour ajouter un console.log déclaration et enregistrer le fichier.
  3. Le contenu du texte brut de script.js sont réinjectés dans le moteur V8 pour traitement.
  4. Des comparaisons sont faites entre les nouveaux script.js et le vieux. Les suppressions, les ajouts et les modifications sont stockés.
  5. V8 compile le JavaScript modifié et les correctifs script.js avec les changements compilés.

Live Edit fonctionne mieux avec des modifications mineures que de créer des fichiers JavaScript entiers pour votre application. Les scénarios de débogage fonctionnent bien avec Live Edit.

Espaces de travail

Les espaces de travail ne constituent pas un composant essentiel du débogage JavaScript via DevTools. Toutefois, en fonction de vos besoins, cela peut accélérer votre processus de débogage. Les espaces de travail sont une fonctionnalité de DevTools qui vous permet de modifier le contenu d'un dossier sur le système de fichiers en apportant des modifications de code dans DevTools..

Si vous parcourez un projet qui est servi localement via un serveur Web, tel que http: // localhost: 3000 / et le projet existe sur votre système de fichiers à ~ / développement / projet, Par exemple, vous pouvez expliquer à DevTools le mappage entre les deux et utiliser les fonctionnalités Live Edit avec les fonctionnalités de sauvegarde sur disque. Les espaces de travail activent le flux de travail suivant:

  1. Une fois que vous avez informé vos outils Dev sur le mappage entre la page affichée et sa source sur votre système de fichiers, vous pouvez afficher le code source dans Panneau de sources.
  2. Vous rencontrez une erreur JavaScript. Ainsi, lors du débogage, vous modifiez la Panneau de sources.
  3. Vous enregistrez votre changement en utilisant Command-S.

A l'étape 3, la sauvegarde écrase le fichier source d'origine..

Cartes source

Les cartes source résolvent un problème courant lorsqu’il s’agit de code source traité ou compilé en quelque chose d’autre. Les exemples comprennent:

  • Code JavaScript minifié et concaténé dans le cadre d'un système de construction
  • Code Ecmascript 6 qui est transpilé en code ES5 pour qu’il soit compatible avec tous les navigateurs modernes
  • Code CoffeeScript compilé en JavaScript

Le problème est le suivant: lors du débogage d'une version traitée du code, il peut être difficile de comprendre comment le code source d'origine est mappé sur ce que vous visualisez pendant le débogage. Si vous obtenez une erreur dans la console DevTools pour un site Web de production, vous finirez généralement par devoir déboguer une version simplifiée et concaténée du code JavaScript, qui ressemble peu aux fichiers source que vous avez créés..

Une carte source est un fichier généré généré dans le cadre d'un processus de compilation disponible pour les cas d'utilisation répertoriés précédemment. DevTools peut lire un fichier Map Map pour comprendre comment un fichier compilé est mappé sur le fichier d'origine..

Les deux extraits de code (Source File-app.js et Transpiled file-compiled.js) illustrent un code adapté au débogueur de carte source..

Exemple 1. Fichier source-app.js

for (var élément de [1, 2, 3]) console.log (element); 

Notez que le app.js Le fichier source utilise une fonctionnalité compatible Ecmascript 6 appelée itérateur de tableau..

Exemple 2. Fichier compilé.js

"use strict"; for (var $ __ 0 = [1, 2, 3] [Symbol.iterator] (), $ __ 1;! ($ __ 1 = $ __ 0.next ()). done;) var element = $ __ 1.value; console.log (element);  // # sourceMappingURL = app.js.map

Notez que compiled.js est référencé par une balise de script sur une page HTML, avec le runtime Traceur, et est finalement ouvert dans un navigateur.

Même le JavaScript compilé a le console.log déclaration sur la ligne 6. DevTools est capable de montrer exactement oùconsole.log Cette instruction existe dans le fichier source d'origine (débogage de la mappe source), à ​​la ligne 2. Les points d'arrêt fonctionnent comme prévu. Dans les coulisses, le code JavaScript compilé est évalué et exécuté, mais DevTools présente un actif différent à la place de la version évaluée du navigateur..

Extraits

La fonctionnalité Snippets de DevTools fournit un moyen rapide d'écrire du code JavaScript divers et de l'exécuter. Tout le JavaScript exécuté via des extraits est exécuté dans le contexte de la page en cours. L'exécution d'un extrait de DevTools est similaire à l'exécution d'un Bookmarklet sur une page. Vous trouverez peut-être préférable d'écrire certains scripts JavaScript dans des extraits de code plutôt que dans le panneau de la console pour des raisons liées à un meilleur environnement d'édition de code. Vos extraits sont sauvegardés dans le stockage local de DevTools.

Pour utiliser des extraits:

  1. Assurez-vous que la barre latérale gauche est visible dans le Panneau de sources et sélectionnez le Extraits onglet dans la barre latérale (à côté des onglets "Sources" et "Scripts de contenu").
  2. Clic-droit dans la barre latérale gauche et sélectionnez Nouveau créer un nouvel extrait.
  3. Nommez votre nouvel extrait.
  4. Écrire console.log ('Bonjour'); dans l'éditeur de code.
  5. presse Commande-Entrée et notez la sortie résultante dans le panneau de la console.

Vous pouvez trouver un certain nombre d'extraits de code déjà écrits dans ce référentiel d'extraits de DevTools..

Voilà pour la première partie d'une expérience de débogage moderne. Dans la deuxième partie, nous examinerons quelques fonctionnalités de débogage, ainsi que quelques extensions pouvant vous aider..