Modern Debugging Experience Del 1


I denne todelte opplæringsserien tar vi en titt på å skrive og feilsøke JavaScript-kode ved hjelp av moderne verktøy, for eksempel Chrome DevTools.

I del 1 får du et innledende blikk på de ulike panelene i DevTools og hvilke arbeidsflyter de passer for. Det vil også være fokus på å skrive og utføre JavaScript-kode gjennom nettleseren i stedet for en kodeditor. 

1. Hva er nettleser DevTools?

Utviklerverktøy er funksjoner som tilbys av nettlesere som inneholder et sett med verktøy for å inspisere, samhandle med og feilsøke nettsider. Browser DevTools er vanligvis kombinert med alle moderne nettlesere, inkludert Chrome, Firefox, Safari, Opera og Internet Explorer. Denne opplæringen vil fokusere spesielt på DevTools-delen av Chrome Canary, men alle funksjonene som er oppført her, vil trolig være en del av Chrome Stable snart.

Hva kan DevTools tilby til en JavaScript-utvikler?

Den åpne nettplattformen gjør det mulig å Høyreklikk> Inspiser element på en hvilken som helst nettside og oppdag internals av det, men JavaScript har alltid vært litt mer ut av rekkevidde enn CSS (Cascading Style Sheets). Mens DevTools er fullpakket med funksjoner relatert til styling av siden, er det også en haug med mindre kjent funksjonalitet som gjør at du kan se, skrive og feilsøke JavaScript på en rekke måter, enten det er på din egen side eller på en tredjedel -parti-området.

Hvorfor bruke DevTools til JavaScript-arbeidsflyten din?

Hvis du er en front-end webutvikler, anbefales det at du i det minste er oppmerksom på JavaScript-verktøyene DevTools har å tilby. Høyt nivå funksjoner inkluderer:

  • minst to dedikerte paneler hvis brukstilfeller nesten helt og holdent passer til JavaScript
  • et utviklingsmiljø som er raskt å sette opp, med en rask tilbakemelding loop
  • Forhåndsfør feilsøkingsfunksjoner med breakpoints

2. DevTools Oversikt

Denne delen vil dekke brukergrensesnittelementene til DevTools, spesielt Kilden Panel og Console Panel, siden disse er de to panelene som vil bli brukt for resten av denne opplæringen.

Kilder Panel Interface

Legg merke til noen få oppsettegenskaper:

  • DevTools er i en uoppdret tilstand. Du kan foretrekke å legge til venstre, nederst eller til høyre i hovedvinduet.
  • Kildene i kilden panelet er valgt i venstre sidefelt.
  • Ruten i høyre sidefelt er i utvidet tilstand.

Kilden panelet gir deg en kode editor, og den støtter syntaksutheving for mange vanlige filformater som HTML, CSS, JavaScript, CoffeeScript, LESS og Sass. Kodeditoren er tilstede i hovedruten. Rett over hovedruten kan du se faner som svarer til dine åpne filer.

I kildenruten i venstre sidefelt finnes det et filtre som vanligvis viser eiendelene den nåværende inspiserte siden har lastet inn. Eiendeler er gruppert etter domene, og mapper kan være i en utvidet eller sammenfalt tilstand. Hvis du enkelt klikker på et aktiv, åpnes det i kodeditoren.

Den høyre sidelinjen inneholder kontroller for JavaScript-feilsøking, og hver rute kan være i en utvidet eller sammenfalt tilstand. Ulike utgangsnivåer vises her når JavaScript er pauset ved et bruddpunkt.

Konsollpanel

Konsollpanelet lar deg vise utdataene produsert ved diagnostisk logging (for eksempel console.log uttalelser), men også å skrive og evaluere JavaScript i sammenheng med den aktuelt inspiserte siden. Konsollpanelet støtter både Console API og Command Line API. Her er noen funksjoner som er utsatt for hver API, sammen med en beskrivelse av deres produksjon.

Konsoll-API

// En enkel logg setning, logger en streng, array og en objekt console.log ('Hei', [1,2,3], dette);
// Samme som console.log, men formatert i rødt for å indikere en feil console.error ('En feil oppstod');


Kommandolinje-API

taster (vindu); // Få egenskapene til et objekt
0 $; // Hent det valgte elementet i elementpanelet


Øverst på konsollpanelet inneholder noen få kontroller som vist nedenfor.

  • Ingen symbol (sirkel med tilbakeslag) sletter konsollen. Dette er nyttig for når flere meldinger enn ønsket er synlige, og du ønsker å fjerne dem. Du kan også bruke snarveien Kommando-K for å fjerne dem, eller utføre funksjonen klar(), som er en del av Command Line API.
  • Filter åpner en bar med filtreringskontroller, inkludert en inngangs boks. Hvis du bare er interessert i å finne feilmeldinger, velger du feil filter alternativ. Alternativt skriv inn et vanlig uttrykk for bruk som et filter.
  • De Velg menyen () gir muligheter for tilgjengelige JavaScript-utførelseskontekster for å bytte til. Bruk dette når du vil at JavaScript skal evalueres i sammenheng med en IFrame eller Chrome Extension for eksempel.

Konsollpanelet er en av de få panelene som du kan overlegge over andre paneler i DevTools (Elements, Network, Kilder) for å gi bedre arbeidsflyt. Hvis du finner deg selv regelmessig tilbake til konsollpanelet, kan du hente konsollskuffen ved å trykke på Flukt nøkkel.

3. Vise JavaScript ved hjelp av DevTools

Denne delen vil fokusere på å bruke DevTools for å se JavaScript-ressurser et nettsted bruker. Før du fortsetter, anbefales det å deaktivere nettleserens cache via DevTools. For å gjøre dette, naviger til Innstillinger> Generelt og aktiver avkrysningsruten med tittelen Deaktiver cache (mens DevTools er åpen). Dette sikrer at du alltid får en ny versjon av et aktivum.

Arbeidsflyt på tredjepartssider

Naviger til HTML5Please.com, et nettsted som forklarer beredskapen til Web Platform-funksjoner. Åpne DevTools ved hjelp av Kommando-Skift-I eller ved å velge Inspisér element fra sidenes kontekstmeny. Hodet på over til Kilder Panel og legg merke til filtrestrukturen som vises i venstre sidefelt. Det er ikke uvanlig for nettsteder å lagre JavaScript i mapper som "js" eller "skript", slik at du allerede vet hvor du skal se. Åpne opp script.js fil i js mappe. Legg merke til noen få funksjoner i kodeditoren som kan vise seg nyttig når du ser eller rediger JavaScript-kode:

  • full syntax utheving
  • linje- og kolonnnummer på markøren
  • Ny fane som svarer til den åpne filen
  • Ord hendelser kortlagt til gjeldende utvalg
  • brace matchende
  • gå til definisjon

Bruk go-to-definisjonen for å raskt finne eller oppdage JavaScript-metoder eller -funksjoner. Du kan åpne modifikasjonsvinduet for go-to-definisjon via snarveien Kommando-Skift-P. Hvis du kjenner navnet på metoden eller funksjonen du leter etter, skriv den inn i søkeboksen for å gå til definisjon. Når du skriver, oppdateres resultatene i sanntid. Hvert resultat inneholder samsvarende metodenavn (hvis det er en) og linjenummeret der den er definert. Bruk Tast inn for å velge et søkeresultat, og du deretter lander på linjen med kode hvor funksjonen er definert.

Nå åpen modernizr-2.0.min.js i JS / libs mappe. Det faktum at denne filen er minifisert, gjør det vanskeligere å vise. Å velge Pretty Print å ha DevTools bruke en mer intuitiv formatering til filen, ved hjelp av linjeskift og innrykk. Funksjonen Pretty Print fungerer for både CSS og JavaScript.

Lagre ekstern JavaScript til filsystemet

Hver JavaScript-fil i filtre har en kontekstmeny, så åpne den opp med Høyreklikk. Legg merke til noen få alternativer som er nyttige for å ta filen offline for senere bruk.

  • Åpne lenke i ny kategori: bruk dette hvis du ønsker å inspisere nettverksinformasjonen ytterligere i en dedikert kategori (via Nettverkspanel).
  • Lagre som: bruk dette hvis du vil lage en frakoblet kopi av filen i filsystemet ditt.
  • Kopier adresselenken: bruk dette hvis du vil dele nettadressen andre steder.

Finn JavaScript i nettverkspanelet

Nettverkspanelet, i tillegg til å bare vise deg hvilke ressurser en side har lastet inn, vil også vise annen informasjon og data.

  • Initiativtaker: hva forårsaket et skript å laste ned
  • DOMContentLoaded (blå) og Last hendelser (rød): en tidslinjebasert, visuell representasjon av når disse hendelsene brann
  • Størrelse: størrelsen på eiendelen, inkludert Gzip-størrelsen

Bruk HTML5Please.com som et eksempel nettsted, følg med trinnene nedenfor:

  1. Naviger til Nettverkspanel og fjern loggene.
  2. Oppdater siden.
  3. Filtrer for JavaScript-logger ved å velge scripts filter.

Det første skriptet, modernizr-2.0.min.js, har verdien av html5please.com/:17 for initiativtaker. Dette antyder at det var en HTML-ressurs som initierte nedlasting av skriptet (i stedet for en skriptlaster, for eksempel). Klikk på initiatoren, og du blir tatt til linjen med kode i kilden panelet som refererer til filen:

I tilfelle at et skript er dynamisk satt inn (med en skriptlaster for eksempel), kan initiatorkolonnen i nettverkspanelet gi en JavaScript-anropsstabel knyttet til samtalene som skjedde helt opp til punktet hvor skriptet ble dynamisk satt inn inn i DOM.

Du kan klikke på hver samtale i en anropsstabel for å navigere til den aktuelle delen av koden i kilden panelet.

4. Skrive JavaScript ved hjelp av DevTools

I avsnittet "Vise JavaScript ved hjelp av DevTools", forklarte jeg hvordan du viser informasjon, metadata og kildekoden på JavaScript-aktiver. Denne delen vil undersøke måtene du kan skrive JavaScript ved hjelp av DevTools.

Konsollpanel

Bruk konsollpanelet til å skrive raske JavaScript-linjer med umiddelbare resultater. JavaScript utføres med konteksten til den aktuelt inspiserte siden. Utfør noe JavaScript i konsollpanelet ved å trykke på Tast inn etter at du har tastet inn noen kode.

Se API-en for API og kommandolinje for en liste over tilgjengelige metoder og funksjoner.

Tips

Mens konsollpanelet er relativt enkelt, er det noen få små tips for å forbedre arbeidsflyten din:

  • Bruk Shift-Enter for en ny linje-dette gjør det mulig å skrive multi-line kode.
  • Henrette tastene (vindu) for å oppdage globale variabler på den nåværende siden.
  • Bruke $ _ hjelper til å hente siste resultat av en tidligere kommando.

Du kan finne konsollpanelet for å være en god kandidat for raskt å eksperimentere med JavaScript for å finne ut hva utdataene av visse uttrykk er. Men når du begynner å skrive mer komplisert JavaScript, kan du enkelt støte på begrensninger:

  • Manglende syntaxutheving kan redusere lesbarheten.
  • Innrykk må gjøres manuelt med mellomromstegn.
  • Manglende funksjoner er vanligvis til stede i kodeditorer.

Konsollpanelet har ikke til hensikt å være en kode redaktør erstatning eller til og med alternativ. Her er en liste over noen tilfeller der konsollpanelet kan være nyttig:

  • bruker autofullføringsfunksjonen på grunn av eiendomsoppdagelse
  • finne ut forskjellen mellom JavaScript anrop() og søke om() metoder ved å utføre dem inline og observere resultatene

Kilder Panel

Hovedruten i Kilden Panel inneholder en kodeditor med grunnleggende redigeringsfunksjoner.

CodeMirror

Redaktøren selv er drevet av CodeMirror, en kraftig tekstredigerer implementert ved hjelp av JavaScript. DevTools importerer CodeMirror-editoren i sin egen kodebase og selektivt aktiverer ulike funksjoner som i sin tur blir gjort tilgjengelige for alle Chrome-brukere.

Når du redigerer JavaScript (blant annet støttede språk), inneholder Kilderpanel-editoren en rekke verktøy, for eksempel:

  • Autofullfør forslag: Motta forslag til ordet du kanskje prøver å skrive. Disse er basert på eksisterende skriftlige egenskaper i samme fil. For eksempel, dokument er ikke foreslått etter at du har skrevet inn doku med mindre det allerede er minst en forekomst av ordet dokument i samme fil.
  • Søk og erstatt: For å åpne søkefeltet, klikk Kommando-F. Matchende resultater er skissert i koden i sanntid. Kontrollerer Erstatte Avkrysningsruten gir søk og erstatter evner.
  • Tastatursnarveier: Ulike snarveier eksisterer, ligner de som finnes i kodeditorer som Sublime Text. For eksempel bruk Kommando-/ å bytte en kommentar, Kommando-D for å velge neste ord forekomst av det valgte søkeordet, og mange flere som dokumentert på den offisielle verktøylinjen for verktøylinjen for Chrome Utviklerverktøy.

Live redigering JavaScript

Funksjonen, bedre kjent som Live Edit, gir deg muligheten til å redigere en JavaScript-kode for en side via DevTools, og har endringene som gjelder umiddelbart for siden uten sidens oppdatering. Det er ingen bestemt brukergrensesnitt å bruke dette; du skriver bare om en del av JavaScript-koden og trykker på Kommando-S å lagre det.

Slik fungerer dette bak kulissene, forklares nedenfor, men først vurder følgende forutsetninger (disse er uavhengige for Live Edit):

  1. En side som bruker script.js laster inn i Chrome via en nettside.
  2. script.js Analyseres, evalueres og kompileres i maskinkode via V8 JavaScript Engine.

Her er hva som skjer bak kulissene i Live Edit-funksjonen, med tanke på de tidligere punktene:

  1. Du åpner script.js i DevTools-kodeditoren. Anta at det er en knapp på gjeldende nettside. Ved å klikke på knappen, utfører en klikkhendelselytter en anonym funksjon.
  2. Du endrer den anonyme funksjonen for å legge til en console.log setning og lagre filen.
  3. Råtekstinnholdet i script.js injiseres tilbake til V8-motoren for behandling.
  4. Sammenligninger gjøres mellom den nye script.js og den gamle. Slettinger, tillegg og modifikasjoner lagres.
  5. V8 kompilerer endrede JavaScript og oppdateringer script.js med de kompilerte endringene.

Live Edit fungerer best med mindre endringer i stedet for å skrive hele JavaScript-filer til appen din. Feilsøkingsscenarier fungerer godt med Live Edit.

arbeidsområder

Arbeidsområder er ikke en kritisk del av JavaScript-feilsøking via DevTools. Men, avhengig av dine krav, kan det påskynde debugging arbeidsflyten. Arbeidsområder er en funksjon av DevTools som gjør at du kan endre innholdet i en mappe på filsystemet ved å lage kodeendringer i DevTools.

Hvis du surfer på et prosjekt som serveres lokalt, selv om det er en webserver, for eksempel på http: // localhost: 3000 / og prosjektet finnes på filsystemet ditt på ~ / Utvikling / prosjekt, for eksempel kan du lære DevTools om kartlegging mellom de to og bruke Live Edit-funksjonene med lagre-til-disk-evner. Arbeidsområder gjør følgende arbeidsflyt:

  1. Etter at du har instruert DevTools om kartleggingen mellom siden du ser og kilden på filsystemet ditt, kan du se kildekoden i Kilder Panel.
  2. Du støter på en JavaScript-feil, så mens du feilsøker, gjør du en endring i Kilder Panel.
  3. Du lagrer endringen din ved hjelp av Kommando-S.

I trinn 3 overskriver lagringen den opprinnelige kildefilen.

Kildekart

Kildekart løser et vanlig problem når det gjelder kildekoden som behandles eller kompileres til noe annet. Eksempler er:

  • JavaScript-kode som er minifisert og sammenkoblet som en del av et byggesystem
  • Ecmascript 6-kode som er omformet til ES5-kode slik at den er kompatibel med alle moderne nettlesere
  • CoffeeScript-kode som blir samlet inn i JavaScript

Problemet er som følger: Når du feilsøker en behandlet versjon av koden, kan det være vanskelig å forstå hvordan den opprinnelige kildekoden kodes til det du ser under feilsøking. Hvis du får en feil i DevTools-konsollen for et produksjonsnettsted, vil du typisk ende opp med å feilsøke en minifisert og sammenkoblet versjon av JavaScript-koden, noe som ikke ligner kildefiler som du forfatter.

En kildekart er en generert fil som er produsert som en del av en kompileringsprosess som er tilgjengelig for brukssaker som er oppført tidligere. DevTools kan lese en kilde kartfil for å forstå hvordan en kompilert filkart til den opprinnelige filen.

De to kodestykker (Kildefil-app.js og Transpiled file-compiled.js) viser kildekorts debugger-vennlig kode.

Eksempel 1. Kildefil-app.js

for (var element av [1, 2, 3]) console.log (element); 

Legg merke til at app.js kildefilen bruker en Ecmascript 6-kompatibel funksjon kjent som Array-iteratoren.

Eksempel 2. Transpiled File-compiled.js

"bruk strenge"; for (var $ __ 0 = [1, 2, 3] [Symbol.iterator] (), $ __ 1;! ($ __ 1 = $ __ 0.neste ()). gjort;) var element = $ __ 1.value; console.log (element);  // # sourceMappingURL = app.js.map

Noter det compiled.js refereres av en skriptetikett på en HTML-side, sammen med Traceur-kjøretiden, og til slutt åpnes i en nettleser.

Selv den kompilerte JavaScript har console.log setning på linje 6. DevTools kan vise nøyaktig hvorconsole.log erklæringen finnes i den opprinnelige kildefilen (kildekortsfeilsøking), som er på linje 2. Brytpunkter fungerer som forventet. Bak kulissene blir det kompilerte JavaScript evaluert og utført, men DevTools presenterer en annen ressurs i stedet for den evaluerte versjonen av nettleseren.

Tekstutdrag

Utklippsfunksjonen i DevTools gir en rask måte å skrive diverse JavaScript-kode på og utføre. Alle JavaScript som utføres via Snippets, kjøres i sammenheng med gjeldende side. Å utføre en DevTools-utdrag ligner på å kjøre en bokmerke på en side. Det kan hende du foretrekker å skrive visse JavaScript i Snippets, i motsetning til Console Panel, av grunner knyttet til et bedre kodedigeringsmiljø. Dine utdrag lagres i Lokal lagring av DevTools.

Slik bruker du utklipp:

  1. Kontroller at venstre sidebjelke er synlig i Kilder Panel og velg Tekstutdrag fanen i sidefeltet (ved siden av kategoriene "Kilder" og "Innholdsskript").
  2. Høyreklikk i venstre sidefelt og velg Ny å opprette en ny utdrag.
  3. Gi den nye koden din navn.
  4. Skrive console.log ( 'Hei'); i kodeditoren.
  5. trykk Command-Enter og merk det resulterende resultatet i konsollpanelet.

Du kan finne en rekke allerede skrevet utklipp i dette DevTools Snippets-depotet.

Det er det for del 1 av en moderne debugging-opplevelse. I del 2 tar vi en titt på noen feilsøkingsfunksjoner og også noen utvidelser som kan hjelpe med dette.