Sursă Hărți 101

În fluxul de lucru modern al zilelor noastre, codul pe care îl scriem în mediile noastre de dezvoltare este considerabil diferit de codul de producție, după executarea acestuia prin compilare, minificare, concatenare sau alte procese de optimizare.

Acesta este locul unde hărțile sursă intră în joc, indicând cartografia exactă din codul nostru de producție la codul original creat. În acest tutorial introductiv, vom lua un proiect simplu și îl vom rula prin diferite compilatoare JavaScript pentru a juca cu hărțile sursă în browser.


Ce sunt hărțile sursă?

Hărțile sursă oferă o metodă limbaj-agnostică de cartografiere a codului de producție la codul original care a fost scris.

Hărțile sursă oferă o modalitate lingvistică-agnostică de cartografiere a codului de producție la codul original care a fost creat în mediul dvs. de dezvoltare. Când ne uităm în cele din urmă la baza de coduri, generată și pregătită pentru producție, devine foarte dificilă localizarea exactă a locului unde este cartografia liniei către codul original creat. Totuși, în timpul compilării, o hartă sursă stochează această informație, astfel încât, atunci când vom interoga o secțiune de linie, aceasta va returna locația exactă în fișierul original la noi! Aceasta oferă un avantaj imens pentru dezvoltator, deoarece codul devine apoi citit - și chiar debuggabil!

În acest tutorial, vom lua un cod foarte simplu de cod JavaScript și SASS, le vom rula prin diverse compilatoare și apoi vom vizualiza fișierele noastre originale în browser cu ajutorul hărților sursă. Continuați și descărcați fișierele demo și să începem!


browserele

Rețineți că, în timp ce scrieți acest articol, Chrome (versiunea 23) acceptă hărți sursă JavaScript și chiar hărți SASS Source. Firefox ar trebui, de asemenea, să obțină sprijin în viitorul apropiat, deoarece este în prezent într-un stadiu activ de dezvoltare. Cu acest cuvânt de precauție din drum, să vedem acum cum putem profita de hărțile sursă în browser!

Hărți sursă în Chrome

În primul rând, trebuie să activați asistența în Chrome utilizând următorii pași simpli:

  • Deschideți Instrumentele de dezvoltator Chrome: Vizualizați -> Dezvoltator -> Instrumente pentru dezvoltatori
  • Faceți clic pe butonul "Setări" din colțul din dreapta jos
  • Alegeți "General" și selectați "Activați hărțile sursă"

Înființat

Dacă doriți să lucrați împreună cu acest tutorial, descărcați demo-ul și deschideți directorul "start". Structura fișierelor și a directorilor este destul de elementară, cu un simplu JavaScript scripturi / script.js. Ar trebui să te poți deschide index.html și chiar adăugați unele nume de culori CSS sau valori hex pentru a modifica culoarea de fundal.

 $ copac. ├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ─ stil.css └── stil.sass

Aruncați o privire prin fișierele simple de script în Javascript simplu, TypeScript sau CoffeeScript. Folosind diverse compilatoare JavaScript, vom crea o versiune gata de producție, precum și vom genera hărțile sursă corespunzătoare.

În secțiunile următoare, vom folosi cinci moduri diferite de a genera un compilat și minificat script.js, împreună cu harta sursă asociată. Puteți alege fie să testați toate opțiunile, fie pur și simplu să mergeți cu compilatorul pe care îl cunoașteți deja. Aceste opțiuni includ:

  1. Închiderea compilatorului
  2. GruntJS cu JSMin
  3. Uglifyjs 2
  4. CoffeeScript și Redux
  5. manuscris dactilografiat

Opțiunea A: Compilarea închiderii

Closure Compiler, de la Google, este un instrument pentru optimizarea JavaScript. Aceasta face acest lucru prin analiza codului dvs., eliminarea biților irelevanți și apoi minimizarea restului. În plus, poate genera hărți sursă.

Să folosim următorii pași pentru a crea o versiune optimizată a script.js, folosind compilatorul de închidere:

  1. Descărcați cel mai recent compilator de închidere.
  2. Transferați fișierul, compiler.jar, la director, script-uri.
  3. Navigați la director, script-uri, din linia de comandă și executați următoarele, astfel încât să fie optimizat, pregătit pentru producție script.closure.js fișierul va fi creat:
     java -jar compiler.jar --js script.js --js_output_file script.closure.js
  4. Asigura-te ca index.html este acum legată de fișierul nou creat, scripturi / script.closure.js, prin necomantarea opțiunii A.

Când ne deschidem index.html în browser și navigați la panoul sursă în instrumentele dezvoltatorului, numai versiunea optimizată a script.closure.js este menționat; nu avem nici o modalitate de a face o relație înapoi cu originalul nostru, în mod corespunzător indentat. Să creați în continuare fișierul hartă sursă executând următoarea comandă în script-uri director:

 java -jar compiler.jar --js script.js --create_source_map script.closure.js.map --source_map_format = V3 --js_output_file script.closure.js

Observați că Closure Compiler are două opțiuni, --create_source_map și --source_map_format, pentru a crea un fișier hartă sursă, script.closure.js.map, cu versiunea sursă a hărții 3. Apoi, adăugați urlul sursei de mapare la sfârșitul fișierului de script compilat, script.closure.js, astfel încât fișierul optimizat să conțină informațiile despre locația sursei:

 // @ sourceMappingURL = script.closure.js.map

Acum, când vizualizăm proiectul în browser, directorul "scripturi", în panoul sursă al instrumentelor pentru dezvoltatori, va afișa atât fișierul original, cât și versiunea optimizată, script.closure.js. Deși browserul utilizează, desigur, fișierul optimizat la care ne-am referit inițial index.html, hărțile sursă ne permit să creăm o conexiune la fișierul original.

De asemenea, încercați cu puncte de întrerupere pentru depanare, dar rețineți că expresiile de ceas și variabilele nu sunt încă disponibile cu hărțile sursă. Sperăm că vor fi în viitor!


Opțiunea B: Activitatea GruntJS pentru JSMin

Dacă utilizați deja Grunt.js pentru procesele de construire, atunci pluginul Grunt pentru hărțile sursă JSMin va fi util. Nu numai că vă va optimiza codul, dar va crea și harta sursă!

Următorii pași vor demonstra cum se creează o versiune optimizată a script.js cu pluginul Grunt JSMin:

  1. instalați Grunt.js și inițiați un fișier grunt, grunt.js, în rădăcina directorului "start":
     $ npm instalare -g grunt $ npm vizualizare versiune grunt npm http GET https://registry.npmjs.org/grunt npm http 200 https://registry.npmjs.org/grunt 0.3.17 $ grunt init: gruntfile
  2. Instalați pluginul Grunt grunt-jsmin-sourcemap; când faci, un director, numit node_modules / geamăt-JSMin-sourcemap va fi creat:
     $ npm instalează grunt-jsmin-sourcemap
  3. Editați noul creat grunt.js fișier pentru a conține numai JSMin-sourcemap sarcina - de a păstra lucrurile cât mai simple posibil.
     modul.exports = funcția (grunt) grunt.loadNpmTasks ('grunt-jsmin-sourcemap'); "scripts / script.jsmin-script.js", destMap: 'scripts / script.jsmin-sourcemap': all: src: grunt.js.map '); grunt.registerTask ("implicit", "jsmin-sourcemap"); ;
  4. Reveniți la linia de comandă și executați mormăit; aceasta va executa sarcina jsmin-sourcemap, deoarece sarcina implicită este menționată ca atare în fișierul grunt.js:
     $ grunt Executarea sarcinii "jsmin-sourcemap: all" (jsmin-sourcemap) Efectuată, fără erori.
  5. În fișierul sursă nou creat, script.grunt-jsmin.js.map, asigurați-vă că sursa este "surse": [ "script.js"].
  6. Dezactivați opțiunea B pentru a vă conecta la fișierul nou creat, script.grunt-jsmin.js, în index.html, și se deschid în browser.

Cu Grunt și plugin-ul, jsmin-sourcemap, procesul de construire a creat două fișiere: fișierul script optimizat cu urlul sursă de mapare în partea de jos, precum și o hartă sursă. Veți avea nevoie de amândouă pentru a le vedea în browser.


Opțiunea C: UglifyJS

UglifyJS2 este un alt parser JavaScript, minfier și compresor. Similar cu cele două variante de mai sus, UglifyJS2 va crea un fișier script optimizat, atașat cu un url de cartografiere sursă, precum și un fișier hartă sursă care va conține maparea la fișierul original. Pentru a utiliza UglifyJS, executați următoarele în linia de comandă a directorului "start":

  1. Instalați modulul NPM, urâți-js, la nivel local; un director, numit nocde_module / sluți-js, va fi creat.
     $ npm instalare uglify-js $ npm vizualizare uglify-js versiune 2.2.3 $ cd scripts /
  2. În directorul "scripturi", vom executa comanda pentru a crea o versiune optimizată, precum și un fișier sursă cu opțiunile, --Sursa hartă și --producție, pentru a numi fișierul de ieșire.
     uglifyjs - script-ul scriptului script.uglify.js.map --output script.uglify.js script.js
  3. În cele din urmă, asigurați-vă că index.html este corelat corect cu scenariul, script.uglify.js

Opțiunea D: CoffeeScript Redux

Pentru cele trei opțiuni anterioare, am cerut doar o optimizare în un singur pas, de la codul original la JavaScript optimizat. Cu toate acestea, pentru limbi precum CoffeeScript, avem nevoie de un proces în două etape: CoffeeScript> JavaScript> JavaScript optimizat. În această secțiune, vom explora modul de creare a hărților sursă pe mai multe niveluri cu CoffeeScript și compilatorul CoffeeScript Redux.

Pasul 1: CoffeeScript pentru a simplifica JavaScript

Navigați la directorul "start" în linia de comandă. În următorii pași, vom mapa fișierul de script optimizat înapoi la CoffeeScript:

  1. Instalați CoffeeScript ca pachet global npm
  2. Compilați fișierul CoffeeScript, script.coffee.coffee, pentru a crea o versiune JavaScript simplă, utilizând următoarea comandă:
     $ coffee -c scripturi / script.coffee.coffee
  3. Instalați CoffeeScript Redux:
     $ git clone https://github.com/michaelficarra/CoffeeScriptRedux.git cafe-redux $ cd cafe-redux $ npm instalare $ make -j test $ cd ... 
  4. Apoi, vom crea un fișier hartă sursă, script.coffee.js.map, care va reține informațiile de cartografiere din JavaScript generat înapoi la fișierul CoffeeScript:
     $ cafea-redux / bin / cafea -source-map -i scripturi / script.coffee.coffee> script-uri / script.coffee.js.map
  5. Asigurați-vă că fișierul JavaScript generat, script.coffee.js, are URL-ul sursei de mapare chiar la sfârșit cu următoarea linie:
     // @ sourceMappingURL = script.coffee.js.map
  6. Asigurați-vă că fișierul hartă sursă, script.coffee.js.map, are fișierul de referință corect ca "Fișier": "script.coffee.coffee", și fișierul sursă ca "surse": [ "script.coffee.coffee"]

Pasul 2: JavaScript simplu pentru a minimiza JavaScript

  1. În cele din urmă, vom folosi UglifyJS încă o dată pentru a minimiza JavaScript generat, precum și pentru a crea o hartă sursă. De data aceasta, aceasta va avea o hartă sursă, astfel încât să putem reveni la fișierul original CoffeeScript. Executați următoarea comandă în directorul "scripturi":
     script-uri de $ cd / $ uglifyjs script.coffee.js -o script.coffee.min.js --source-map script.coffee.min.js.map - in-source-map script.coffee.js.map
  2. În cele din urmă, asigurați-vă că fișierul hartă sursă, script.coffee.min.js.map, are fișierul de referință corect ca "file": "script.coffee.min.js", și sursele corecte ca "surse": [ "script.coffee.coffee"].

Opțiunea E: tip

Tipul de tip script, la fel ca și CoffeeScript, necesită, de asemenea, un proces în două etape: TypeScript> Plain JavaScript> Minified JavaScript. Deoarece scriptul folosește un plugin jQuery, avem nevoie de două fișiere TypeScript, care sunt deja furnizate: script.typescript.ts și jquery.d.ts.

Pasul 1: JavaScript tip JavaScript

Navigați la directorul "scripturi" din linia de comandă și executați următoarea comandă:

 $ tsc script.typescript.ts -sourcemap

Comanda de mai sus va crea un nou fișier JavaScript, numit script.typescript.js, cu URL-ul sursei de mapare în partea de jos: // @ sourceMappingURL = script.typescript.js.map. Cu această singură comandă, va crea, de asemenea, fișierul hărții, script.typescript.js.map.

Pasul 2: JavaScript simplu pentru a minimiza JavaScript

Ca și în cazul exemplului CoffeeScript, următorul pas este să utilizați UglifyJS.

 $ uglifyjs script.typescript.js -o script.typescript.min.js - script-sursă-script script.typescript.min.js.map - în script-ul sursă-script-script.typescript.js.map

În cele din urmă, asigurați-vă că index.html link-uri către fișierul corect de script, scripturi / script.typescript.min.js, și deschideți-l în browser!


Hărți sursă pentru SASS

Dincolo de JavaScript, în prezent, Chrome acceptă și hărți sursă SASS sau SCSS. Pentru cartografiere sursă SASS, să modificăm câteva setări în Chrome, apoi să compilam SASS în CSS cu parametri de depanare:

  1. Înainte de a modifica orice setări, observați că, la inspectarea unui element din instrumentele de dezvoltator, acesta ne va arăta doar referința fișierului CSS. Acest lucru nu este prea util.
  2. Mergeți la chrome: // flags /.
  3. Activați experimentele din Instrumente pentru dezvoltatori.
  4. Deschideți Instrumente Dev> Setare> Experimente> Verificați "Suport pentru SASS".
  5. Compilați SASS cu următorii parametri de depanare din directorul "stiluri". Acest lucru va prefixa fiecare set de reguli CSS @media -sass-debug-info care va avea informațiile despre numele fișierului și numărul liniei.
     $ cd stiluri / $ sass --debug-info - vizionează stil.sass: style.css
  6. Asigurați-vă că reporniți instrumentele de dezvoltare și actualizați pagina.
  7. Acum, când inspectăm un element, putem accesa fișierul original SASS!

Dincolo de simpla vizualizare a fișierului SASS, dacă executați LiveReload în fundal și efectuați modificări în fișierul SASS, pagina va fi actualizată pentru a reflecta modificările. De exemplu, să deschidem proiectul în Firefox și să inspectăm pagina utilizând extensia Firebug.


Informații într-o hartă sursă

Dacă vom vedea oricare dintre *.Hartă fișiere, va conține informațiile de cartografiere din fișierul original în fișierul optimizat. Structura unei hărți sursă este de obicei în format JSON, utilizând specificațiile Versiunii 3. Acesta va conține de obicei următoarele cinci proprietăți:

  1. versiune: Numărul versiunii hărții sursă - de obicei "3."
  2. fişier: Numele fișierului optimizat.
  3. surse: Numele fișierelor originale.
  4. nume: Simboluri utilizate pentru cartografiere.
  5. mapări: Maparea datelor.

Resurse aditionale

Sursa hărților se află încă foarte mult sub dezvoltare activă, dar, deja, există o mare cantitate de resurse disponibile pe web. Asigurați-vă că ați luat în considerare următoarele, dacă doriți să aflați mai multe.

  • Introducere în hărțile sursă JavaScript de către Ryan Seddon, HTML5 Rocks
  • The Episode Breakpoint 3: Hărți sursă JavaScript de către echipa de dezvoltatori Google
  • Episodul de întrerupere 2: Sursa SASS Maps de către echipa de dezvoltatori Google
  • Sursa hărți wiki pe limbi, instrumente, articole despre hărți sursă
  • Sursă de hărți pe mai multe niveluri cu CoffeeScript și TypeScript de Ryan Seddon
  • Sursa Hărți versiunea 3 propunere

Concluzie

Sper că procesul de deplasare de mai sus, folosind compilatoare multiple, a demonstrat potențialul hărților sursă. Deși funcționalitatea este în prezent limitată, sperăm că în viitor vom avea capacitatea completă de depanare, inclusiv accesul la variabile și expresii.

Cod