Quellkarten 101

Im heutigen modernen Workflow unterscheidet sich der von uns in unseren Entwicklungsumgebungen erstellte Code erheblich vom Produktionscode, nachdem er durch Kompilierung, Minifizierung, Verkettung oder verschiedene andere Optimierungsprozesse ausgeführt wurde.

Hier kommen Quellkarten ins Spiel, indem wir die genaue Zuordnung in unserem Produktionscode auf den ursprünglich erstellten Code hinweisen. In diesem einführenden Lernprogramm nehmen wir ein einfaches Projekt und führen es durch verschiedene JavaScript-Compiler, um mit Quellkarten im Browser zu spielen.


Was sind Quellkarten??

Quellkarten bieten eine sprachunabhängige Möglichkeit, Produktionscode dem ursprünglich erstellten Code zuzuordnen.

Quellkarten bieten eine sprachunabhängige Möglichkeit, Produktionscode dem ursprünglichen Code zuzuordnen, der in Ihrer Entwicklungsumgebung erstellt wurde. Wenn wir uns schließlich die Codebasis anschauen, die für die Produktion erstellt und vorbereitet wurde, wird es sehr schwierig, genau zu bestimmen, wo sich die Linienzuordnung zu unserem ursprünglich erstellten Code befindet. Während des Kompilierens werden diese Informationen jedoch in einer Quellkarte gespeichert. Wenn Sie einen Zeilenabschnitt abfragen, wird die genaue Position in der Originaldatei an uns zurückgegeben. Dies bietet einen großen Vorteil für den Entwickler, da der Code dann lesbar wird - und sogar debuggbar ist!

In diesem Lernprogramm nehmen wir einen sehr einfachen Teil von JavaScript und SASS-Code, führen ihn durch verschiedene Compiler und sehen dann unsere Originaldateien mithilfe von Quellkarten im Browser. Laden Sie die Demo-Dateien herunter und beginnen Sie mit dem Starten!


Browser

Bitte beachten Sie, dass Chrome (Version 23) beim Schreiben dieses Artikels JavaScript-Quellkarten und sogar SASS-Quellkarten unterstützt. Firefox sollte in naher Zukunft ebenfalls Unterstützung erhalten, da es sich derzeit in einer aktiven Entwicklungsphase befindet. Lassen Sie uns wissen, wie wir die Quellkarten im Browser nutzen können!

Quellkarten in Chrome

Zunächst müssen wir die Unterstützung in Chrome mit den folgenden einfachen Schritten aktivieren:

  • Öffnen Sie die Chrome-Entwicklertools: Ansicht -> Entwickler -> Entwicklertools
  • Klicken Sie in der rechten unteren Ecke auf das Zahnrad "Einstellungen"
  • Wählen Sie "Allgemein" und wählen Sie "Quellkarten aktivieren".

Konfiguration

Wenn Sie mit diesem Tutorial arbeiten möchten, laden Sie die Demo herunter und öffnen Sie das Verzeichnis "start". Die Datei- und Verzeichnisstruktur ist ziemlich einfach, mit ein paar einfachen JavaScript-Anweisungen scripts / script.js. Sie sollten sich öffnen können index.html Fügen Sie sogar einige CSS-Farbnamen oder Hex-Werte hinzu, um die Hintergrundfarbe zu ändern.

 $ Baum. ├── index.html ├── Skripte ├── jquery.d.ts ├── ├── script.coffee.coffee ├── script.js └── script.typescript.ts └── styles ├─ ─ style.css └── style.sass

Schauen Sie sich die einfachen Skriptdateien in einfachem JavaScript, TypeScript oder CoffeeScript an. Mit verschiedenen JavaScript-Compilern erstellen wir eine produktionsbereite Version und generieren die entsprechenden Quellkarten.

In den folgenden Abschnitten verwenden wir fünf verschiedene Möglichkeiten, um kompilierte und minimierte zu generieren script.js, zusammen mit der zugehörigen Quellkarte. Sie können entweder alle Optionen testen oder einfach mit dem Compiler gehen, den Sie bereits kennen. Diese Optionen umfassen:

  1. Schließungs-Compiler
  2. GruntJS mit JSMin
  3. Uglifyjs 2
  4. CoffeeScript und Redux
  5. Typoskript

Option A: Closure Compiler

Closure Compiler von Google ist ein Tool zur Optimierung von JavaScript. Dazu analysieren Sie Ihren Code, entfernen irrelevante Bits und minimieren dann den Rest. Darüber hinaus kann es auch Quellkarten erstellen.

Führen Sie die folgenden Schritte aus, um eine optimierte Version von zu erstellen script.js, mit dem Closure-Compiler:

  1. Laden Sie den neuesten Closure-Compiler herunter.
  2. Übertragen Sie die Datei, compiler.jar, zum Verzeichnis, Skripte.
  3. Navigieren Sie zu dem Verzeichnis, Skripte, von der Kommandozeile aus und führen Sie folgendes aus, damit eine optimierte, produktionsbereite script.closure.js Datei wird erstellt:
     java -jar compiler.jar --js script.js --js_output_file script.closure.js
  4. Sicher gehen, dass index.html ist jetzt mit der neu erstellten Datei verknüpft, scripts / script.closure.js, durch Auskommentieren von Option A.

Wenn wir uns öffnen index.html Navigieren Sie im Browser und navigieren Sie zum Source Panel in den Entwicklerwerkzeugen nur die optimierte Version von script.closure.js wird referenziert; Wir haben keine Möglichkeit, eine Beziehung zu unserem Original herzustellen, die richtig eingerückt ist. Als Nächstes erstellen Sie die Quellkartendatei, indem Sie den folgenden Befehl in der Datei ausführen Skripte Verzeichnis:

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

Beachten Sie, dass der Closure Compiler zwei Optionen enthält, --create_source_map und --source_map_format, eine Quellkartendatei erstellen, script.closure.js.map, mit Source Map Version 3. Hängen Sie anschließend die Quell-Mapping-URL an das Ende der kompilierten Skriptdatei an, script.closure.js, so dass die optimierte Datei die Standortinformationen der Quellkarte enthält:

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

Wenn wir das Projekt jetzt im Browser anzeigen, zeigt das Verzeichnis "scripts" im Quellbereich der Entwicklerwerkzeuge sowohl die Originaldatei als auch die optimierte Version, script.closure.js. Obwohl der Browser natürlich die optimierte Datei verwendet, auf die wir ursprünglich verwiesen haben index.html, Quellkarten ermöglichen es uns, eine Verbindung zur Originaldatei herzustellen.

Probieren Sie es auch mit Haltepunkten für das Debugging aus. Beachten Sie jedoch, dass Watch-Ausdrücke und -Variablen in Quellkarten noch nicht verfügbar sind. Hoffentlich werden sie in der Zukunft sein!


Option B: GruntJS-Task für JSMin

Wenn Sie Grunt.js bereits für Buildprozesse verwenden, ist das Grunt-Plugin für JSMin-Quellkarten hilfreich. Es optimiert nicht nur Ihren Code, sondern erstellt auch die Quellzuordnung!

Die folgenden Schritte zeigen, wie Sie eine optimierte Version von erstellen script.js mit dem Grunt JSMin Plugin:

  1. Installieren Sie Grunt.js und initiieren Sie eine Gruntdatei, grunt.js, im Stammverzeichnis des "start" -Verzeichnisses:
     $ npm install -g grunt $ npm Ansicht grunt Version npm http GET https://registry.npmjs.org/grunt npm http 200 https://registry.npmjs.org/grunt 0.3.17 $ grunt init: gruntfile
  2. Installieren Sie das Grunt-Plugin Grunt-Jsmin-Sourcemap. Wenn Sie dies tun, wird ein Verzeichnis aufgerufen node_modules / grunt-jsmin-sourcemap wird erstellt:
     $ npm install grunt-jsmin-sourcemap
  3. Bearbeiten Sie das neu erstellte grunt.js Datei nur das enthalten jsmin-sourcemap Aufgabe - die Dinge so einfach wie möglich zu halten.
     module.exports = function (grunt) grunt.loadNpmTasks ('grunt-jsmin-sourcemap'); grunt.initConfig ('jsmin-sourcemap': alle: src: ['scripts / script.js']), dest: 'scripts / script.jsmin-grunt.js', destMap: 'scripts / script.jsmin- grunt.js.map '); grunt.registerTask ('default', 'jsmin-sourcemap'); ;
  4. Kehren Sie zur Befehlszeile zurück und führen Sie sie aus grunzen; Dadurch wird die Task jsmin-sourcemap ausgeführt, da die Standardaufgabe in der Datei grunt.js als solche angegeben ist:
     $ grunt Ausführen der Task "jsmin-sourcemap: all" (jsmin-sourcemap) Fertig, ohne Fehler.
  5. In der neu erstellten Quellkartendatei, script.grunt-jsmin.js.map, Stellen Sie sicher, dass die Quelle ist "sources": ["script.js"].
  6. Entfernen Sie die Option B, um eine Verknüpfung zu der neu erstellten Datei herzustellen, script.grunt-jsmin.js, innerhalb index.html, und öffnen Sie sich im Browser.

Mit Grunt und dem Plugin jsmin-sourcemap erstellte der Erstellungsprozess zwei Dateien: die optimierte Skriptdatei mit der Quellzuordnungs-URL am unteren Rand sowie eine Quellenzuordnung. Sie benötigen beide, um alle im Browser anzuzeigen.


Option C: UglifyJS

UglifyJS2 ist ein weiterer JavaScript-Parser, Minfier und Kompressor. Ähnlich wie die beiden oben genannten Alternativen erstellt UglifyJS2 eine optimierte Skriptdatei, die mit einer Quell-Zuordnungs-URL und einer Quell-Zuordnungsdatei versehen ist, die die Zuordnung zur Originaldatei enthält. Um UglifyJS zu verwenden, führen Sie Folgendes in der Befehlszeile des Verzeichnisses "start" aus:

  1. Installieren Sie das NPM-Modul, uglify-js, örtlich; ein Verzeichnis, genannt nocde_module / uglify-js, wird erstellt.
     $ npm install uglify-js $ npm Ansicht uglify-js Version 2.2.3 $ cd-Skripte /
  2. Im Verzeichnis "scripts" führen wir den Befehl aus, um eine optimierte Version sowie eine Quelldatei mit den Optionen zu erstellen, --Quellkarte und --Ausgabe, um die Ausgabedatei zu benennen.
     uglifyjs --source-map script.uglify.js.map --output script.uglify.js script.js
  3. Zum Schluss stellen Sie das sicher index.html ist korrekt mit dem Skript verknüpft, script.uglify.js

Option D: CoffeeScript Redux

Für die vorherigen drei Optionen haben wir nur eine einstufige Optimierung benötigt, vom ursprünglichen Code bis zum optimierten JavaScript. Für Sprachen wie CoffeeScript benötigen wir jedoch einen zweistufigen Prozess: CoffeeScript> JavaScript> optimiertes JavaScript. In diesem Abschnitt erfahren Sie, wie Sie mit CoffeeScript und dem CoffeeScript Redux-Compiler mehrstufige Quellkarten erstellen.

Schritt 1: CoffeeScript für einfaches JavaScript

Navigieren Sie in der Befehlszeile zum Verzeichnis "start". In den folgenden Schritten ordnen wir die optimierte Skriptdatei wieder dem CoffeeScript zu:

  1. Installieren Sie CoffeeScript als globales npm-Paket
  2. Kompilieren Sie die CoffeeScript-Datei, script.coffee.coffee, So erstellen Sie eine einfache JavaScript-Version mit dem folgenden Befehl:
     $ coffee -c scripts / script.coffee.coffee
  3. Installieren Sie CoffeeScript Redux:
     $ git clone https://github.com/michaelficarra/CoffeeScriptRedux.git coffee-redux $ cd coffee-redux $ npm installiere $ make -j test $ cd… 
  4. Als Nächstes erstellen wir eine Quellkartendatei, script.coffee.js.map, Dadurch werden die Zuordnungsinformationen aus dem generierten JavaScript in der CoffeeScript-Datei gespeichert:
     $ coffee-redux / bin / coffee --source-map -i scripts / script.coffee.coffee> scripts / script.coffee.js.map
  5. Stellen Sie sicher, dass die generierte JavaScript-Datei, script.coffee.js, hat am Ende die Quell-Mapping-URL mit der folgenden Zeile:
     // @ sourceMappingURL = script.coffee.js.map
  6. Stellen Sie sicher, dass die Quellkartendatei, script.coffee.js.map, hat die richtige Referenzdatei als "Datei": "script.coffee.coffee", und Quelldatei als "sources": ["script.coffee.coffee"]

Schritt 2: Normales JavaScript zu reduziertem JavaScript

  1. Abschließend verwenden wir noch einmal UglifyJS, um das generierte JavaScript zu minimieren und eine Quellkarte zu erstellen. Diesmal wird eine Quellkarte benötigt, damit wir auf die ursprüngliche CoffeeScript-Datei zurückgreifen können. Führen Sie den folgenden Befehl im Verzeichnis "scripts" aus:
     $ cd scripts / $ uglifyjs script.coffee.js -o script.coffee.min.js --source-map script.coffee.min.js.map --in-source-map script.coffee.js.map
  2. Stellen Sie abschließend sicher, dass die Quellkartendatei, script.coffee.min.js.map, hat die richtige Referenzdatei als "Datei": "script.coffee.min.js", und die richtigen Quellen als "sources": ["script.coffee.coffee"].

Option E: TypeScript

TypeScript erfordert ebenso wie CoffeeScript einen zweistufigen Prozess: TypeScript> Plain JavaScript> Reduziertes JavaScript. Da das Skript ein jQuery-Plugin verwendet, benötigen wir zwei TypeScript-Dateien, die bereits bereitgestellt werden: script.typescript.ts und jquery.d.ts.

Schritt 1: Geben Sie Script in JavaScript ein

Navigieren Sie in der Befehlszeile zum Verzeichnis "scripts" und führen Sie den folgenden Befehl aus:

 $ tsc script.typescript.ts -sourcemap

Der obige Befehl erstellt eine neue JavaScript-Datei mit dem Namen script.typescript.js, mit der Quell-Mapping-URL unten: // @ sourceMappingURL = script.typescript.js.map. Mit diesem einzigen Befehl wird auch die Map-Datei erstellt, script.typescript.js.map.

Schritt 2: Normales JavaScript zu reduziertem JavaScript

Wie beim CoffeeScript-Beispiel besteht der nächste Schritt in der Verwendung von UglifyJS.

 $ uglifyjs script.typescript.js -o script.typescript.min.js --source-map script.typescript.min.js.map --in-source-map script.typescript.js.map

Zum Schluss stellen Sie das sicher index.html verlinkt auf die richtige Skriptdatei, scripts / script.typescript.min.js, und öffnen Sie es im Browser!


Quellkarten für SASS

Neben JavaScript unterstützt Chrome derzeit auch SASS- oder SCSS-Quellkarten. Lassen Sie uns für die SASS-Quellenzuordnung einige Einstellungen in Chrome ändern und dann SASS mit Debug-Parametern in CSS kompilieren:

  1. Beachten Sie vor dem Ändern von Einstellungen, dass bei der Überprüfung eines Elements in den Entwicklerwerkzeugen nur die CSS-Dateireferenz angezeigt wird. Das ist nicht besonders hilfreich.
  2. Gehe zu Chrom: // Flags /.
  3. Aktivieren Sie Developer Tools-Experimente.
  4. Open Dev Tools> Setting> Experiments> Aktivieren Sie "Support für SASS"..
  5. Kompilieren Sie SASS mit den folgenden Debug-Parametern im Verzeichnis "styles". Dies wird jedem CSS-Regelsatz mit vorangestellt @media -sass-debug-info das wird die Information über den Dateinamen und die Zeilennummer haben.
     $ cd styles / $ sass --debug-info --watch style.sass: style.css
  6. Stellen Sie sicher, dass Sie die Entwicklertools neu starten und die Seite aktualisieren.
  7. Wenn wir nun ein Element untersuchen, können wir auf die ursprüngliche SASS-Datei zugreifen!

Wenn Sie nicht nur die SASS-Datei anzeigen, sondern auch LiveReload im Hintergrund ausführen und Änderungen an der SASS-Datei vornehmen, wird die Seite auch aktualisiert, um die Änderungen zu berücksichtigen. Lassen Sie uns beispielsweise das Projekt in Firefox öffnen und die Seite mit der Firebug-Erweiterung überprüfen.


Informationen in einer Quellkarte

Wenn wir einen der sehen *.Karte Dateien, enthält es die Zuordnungsinformationen von der Originaldatei zur optimierten Datei. Die Struktur einer Quellenzuordnung ist normalerweise im JSON-Format und verwendet die Spezifikationen der Version 3. Es enthält normalerweise die folgenden fünf Eigenschaften:

  1. Ausführung: Versionsnummer der Quellenzuordnung - normalerweise "3."
  2. Datei: Name der optimierten Datei.
  3. Quellen: Namen der Originaldateien.
  4. Namen: Für das Mapping verwendete Symbole.
  5. Zuordnungen: Daten zuordnen.

Zusätzliche Ressourcen

Quellkarten sind noch sehr in der Entwicklung, aber im Web gibt es bereits einige großartige Ressourcen. Beachten Sie unbedingt die folgenden Hinweise, wenn Sie mehr erfahren möchten.

  • Einführung in die JavaScript-Quellkarten von Ryan Seddon, HTML5 Rocks
  • Der Haltepunkt Episode 3: JavaScript-Quellkarten vom Google Developer Team
  • Der Haltepunkt Episode 2: SASS-Quellkarten vom Google-Entwicklerteam
  • Quellkarten-Wiki zu Sprachen, Tools, Artikeln zu Quellkarten
  • Mehrstufige Quellkarten mit CoffeeScript und TypeScript von Ryan Seddon
  • Vorschlag für Quellkarten Version 3

Fazit

Ich hoffe, dass der oben beschriebene Durchgang mit mehreren Compilern das Potenzial von Quellkarten demonstriert hat. Obwohl die Funktionalität derzeit begrenzt ist, haben wir hoffentlich in Zukunft volle Debugging-Fähigkeit, einschließlich Zugriff auf Variablen und Ausdrücke.