Cartes source 101

Dans le flux de travail moderne d'aujourd'hui, le code que nous créons dans nos environnements de développement est considérablement différent du code de production, après l'avoir exécuté via la compilation, la minimisation, la concaténation ou divers autres processus d'optimisation..

C’est là que les cartes sources entrent en jeu, en indiquant la correspondance exacte de notre code de production avec le code créé par l’auteur. Dans ce tutoriel d'introduction, nous allons prendre un projet simple et l'exécuter à travers différents compilateurs JavaScript afin de jouer avec les cartes sources dans le navigateur..


Quelles sont les cartes source?

Les cartes source offrent un moyen indépendant de la langue de mapper le code de production avec le code original créé.

Les cartes source offrent un moyen, indépendant de la langue, de mapper le code de production sur le code d'origine créé dans votre environnement de développement. Lorsque nous examinons finalement la base de code, générée et préparée pour la production, il devient très difficile de localiser exactement où se trouve la correspondance de ligne avec notre code créé à l'origine. Cependant, lors de la compilation, une carte source stocke ces informations. Ainsi, lorsque nous interrogons une section de ligne, elle nous renvoie l'emplacement exact dans le fichier d'origine! Cela offre un énorme avantage au développeur, car le code devient alors lisible - et même débogué.!

Dans ce didacticiel, nous allons prendre un morceau très simple de code JavaScript et SASS, les exécuter à travers différents compilateurs, puis afficher nos fichiers d'origine dans le navigateur à l'aide de cartes source. Allez-y et téléchargez les fichiers de démonstration et commençons!


Les navigateurs

Notez que lors de la rédaction de cet article, Chrome (version 23) prend en charge les cartes source JavaScript et même les cartes source SASS. Firefox devrait également bénéficier d'une assistance dans un avenir proche, car il est actuellement à un stade de développement actif. Maintenant que nous avons mis en garde la prudence, voyons comment tirer parti des cartes sources dans le navigateur.!

Cartes source dans Chrome

Tout d'abord, nous devons activer le support dans Chrome en suivant les étapes simples suivantes:

  • Ouvrez les outils de développement Chrome: Affichage -> Développeur -> Outils de développement
  • Cliquez sur le "Paramètres" cog dans le coin en bas à droite
  • Choisissez "Général" et sélectionnez "Activer les cartes sources"

Installer

Si vous souhaitez utiliser ce didacticiel, téléchargez la démo et ouvrez le répertoire "démarrer". La structure des fichiers et des répertoires est assez basique, avec quelques scripts JavaScript simples. scripts / script.js. Vous devriez pouvoir ouvrir index.html et même ajouter des noms de couleurs CSS ou des valeurs hexadécimales pour modifier la couleur de fond.

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

Jetez un coup d'œil aux fichiers de script simples en JavaScript, en TypeScript ou en CoffeeScript. À l'aide de divers compilateurs JavaScript, nous allons créer une version prête pour la production et générer les cartes sources correspondantes..

Dans les sections suivantes, nous utiliserons cinq manières différentes de générer un fichier compilé et minifié. script.js, avec la carte source associée. Vous pouvez soit choisir de tester toutes les options, soit simplement utiliser le compilateur que vous connaissez déjà. Ces options comprennent:

  1. Compilateur de fermeture
  2. GruntJS avec JSMin
  3. Uglifyjs 2
  4. CoffeeScript et Redux
  5. Manuscrit

Option A: Compilateur de fermeture

Closure Compiler, de Google, est un outil d’optimisation de JavaScript. Pour ce faire, il analyse votre code, supprime les bits non pertinents, puis réduit au minimum le reste. En plus de cela, il peut également générer des cartes source.

Utilisons les étapes suivantes pour créer une version optimisée de script.js, en utilisant le compilateur Closure:

  1. Téléchargez le dernier compilateur Closure.
  2. Transférer le fichier, compiler.jar, à l'annuaire, des scripts.
  3. Accédez au répertoire, des scripts, à partir de la ligne de commande et exécutez les opérations suivantes, de sorte qu’une version optimisée prête pour la production script.closure.js le fichier sera créé:
     java -jar compiler.jar --js script.js --js_output_file script.closure.js
  4. Veiller à ce que index.html est maintenant lié au fichier nouvellement créé, scripts / script.closure.js, en décommentant l'option A.

Quand on ouvre index.html dans le navigateur et accédez au panneau Source dans les outils de développement, seule la version optimisée de script.closure.js est référencé; nous n'avons aucun moyen de faire une relation avec notre origine, correctement mise en retrait. Créons ensuite le fichier de carte source en exécutant la commande suivante dans le dossier des scripts annuaire:

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

Notez que Closure Compiler prend deux options, --create_source_map et --source_map_format, créer un fichier de carte source, script.closure.js.map, avec la carte source version 3. Ensuite, ajoutez l'URL de mappage source à la fin du fichier de script compilé, script.closure.js, afin que le fichier optimisé contienne les informations d'emplacement de la carte source:

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

Maintenant, lorsque nous visualisons le projet dans le navigateur, le répertoire "scripts", sous le panneau Source des outils de développement, affiche à la fois le fichier d'origine et la version optimisée., script.closure.js. Bien que le navigateur utilise bien entendu le fichier optimisé que nous avons initialement référencé dans index.html, les cartes sources nous permettent de créer une connexion au fichier d'origine.

Essayez également avec des points d'arrêt pour le débogage, mais gardez à l'esprit que les expressions de contrôle et les variables ne sont pas encore disponibles avec les mappes source. Espérons qu'ils le seront dans le futur!


Option B: tâche GruntJS pour JSMin

Si vous utilisez déjà Grunt.js pour les processus de construction, le plug-in Grunt pour les cartes source JSMin vous sera utile. Non seulement cela optimisera votre code, mais cela créera également la carte source.!

Les étapes suivantes montrent comment créer une version optimisée de script.js avec le plugin Grunt JSMin:

  1. installer Grunt.js et lancer un fichier grunt, grunt.js, dans la racine du répertoire "start":
     $ npm install -g grunt $ npm voir la version grunt npm http GET https://registry.npmjs.org/grunt npm http 200 https://registry.npmjs.org/grunt 0.3.17 $ init. grunt: gruntfile
  2. Installez le plugin Grunt grunt-jsmin-sourcemap; lorsque vous le faites, un répertoire, appelé node_modules / grunt-jsmin-sourcemap sera créé:
     $ npm installer grunt-jsmin-sourcemap
  3. Editer le nouveau créé grunt.js fichier ne contenant que le jsmin-sourcemap tâche - garder les choses aussi simples que possible.
     module.exports = function (grunt) grunt.loadNpmTasks ('grunt-jsmin-sourcemap'); grunt.initConfig ('jsmin-sourcemap': all: src: ['scripts / script.js']], dest: 'scripts / script.jsmin-grunt.js', destMap: 'scripts / script.jsmin- grunt.js.map '); grunt.registerTask ('default', 'jsmin-sourcemap'); ;
  4. Retournez à la ligne de commande et lancez grognement; cela exécutera la tâche jsmin-sourcemap, car la tâche par défaut est indiquée comme telle dans le fichier grunt.js:
     $ grunt Exécution de la tâche "jsmin-sourcemap: all" (jsmin-sourcemap) Fait, sans erreur.
  5. Dans le fichier de carte source nouvellement créé, script.grunt-jsmin.js.map, s'assurer que la source est "sources": ["script.js"].
  6. Décommentez l'option B pour créer un lien vers le fichier nouvellement créé, script.grunt-jsmin.js, dans index.html, et ouvrir dans le navigateur.

Avec Grunt et le plug-in, jsmin-sourcemap, le processus de construction a créé deux fichiers: le fichier de script optimisé avec l'URL de mappage source au bas, ainsi qu'un mappage source. Vous aurez besoin de ces deux éléments pour pouvoir tous les visualiser dans le navigateur..


Option C: UglifyJS

UglifyJS2 est un autre analyseur, minfieur et compresseur JavaScript. Comme pour les deux alternatives ci-dessus, UglifyJS2 créera un fichier de script optimisé, auquel sera ajoutée une URL de mappage source, ainsi qu'un fichier de carte source contenant le mappage vers le fichier d'origine. Pour utiliser UglifyJS, exécutez la commande suivante dans la ligne de commande du répertoire "start":

  1. Installer le module NPM, uglify-js, localement; un répertoire, appelé nocde_module / uglify-js, sera créé.
     $ npm installer uglify-js $ npm voir uglify-js version 2.2.3 $ cd scripts /
  2. Dans le répertoire "scripts", nous exécuterons la commande pour créer une version optimisée, ainsi qu'un fichier source avec les options., --carte source et --sortie, nommer le fichier de sortie.
     uglifyjs --source-map script.uglify.js.map --output script.uglify.js script.js
  3. Enfin, assurez-vous que index.html est correctement lié au script, script.uglify.js

Option D: CoffeeScript Redux

Pour les trois options précédentes, nous n’avions besoin que d’une optimisation en une étape, du code original au JavaScript optimisé. Cependant, pour des langages tels que CoffeeScript, nous avons besoin d’un processus en deux étapes: CoffeeScript> JavaScript> JavaScript optimisé. Dans cette section, nous verrons comment créer des cartes source multiniveaux avec CoffeeScript et le compilateur CoffeeScript Redux..

Étape 1: CoffeeScript to Plain JavaScript

Accédez au répertoire "start" dans la ligne de commande. Dans les étapes suivantes, nous allons mapper le fichier de script optimisé sur le CoffeeScript:

  1. Installer CoffeeScript en tant que paquet global npm
  2. Compiler le fichier CoffeeScript, script.café.café, pour créer une version JavaScript simple, à l’aide de la commande suivante:
     $ coffee -c scripts / script.coffee.coffee
  3. Installez CoffeeScript Redux:
     $ git clone https://github.com/michaelficarra/CoffeeScriptRedux.git coffee-redux $ cd coffee-redux $ npm installer $ make -j tester $ cd… 
  4. Ensuite, nous allons créer un fichier de carte source, script.coffee.js.map, qui contiendra les informations de mappage du JavaScript généré dans le fichier CoffeeScript:
     $ coffee-redux / bin / coffee --source-map -i scripts / script.coffee.coffee> scripts / script.coffee.js.map
  5. Assurez-vous que le fichier JavaScript généré, script.coffee.js, l'URL de mappage source se trouve juste à la fin avec la ligne suivante:
     // @ sourceMappingURL = script.coffee.js.map
  6. Assurez-vous que le fichier de carte source, script.coffee.js.map, a le fichier de référence correct comme "fichier": "script.coffee.coffee", et le fichier source en tant que "sources": ["script.coffee.coffee"]

Étape 2: JavaScript simple à JavaScript minifié

  1. Enfin, nous utiliserons à nouveau UglifyJS pour réduire le code JavaScript généré et créer une carte source. Cette fois-ci, une carte source sera utilisée afin que nous puissions revenir au fichier CoffeeScript d'origine. Exécutez la commande suivante dans le répertoire "scripts":
     $ 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. Enfin, assurez-vous que le fichier de carte source, script.coffee.min.js.map, a le fichier de référence correct comme "fichier": "script.coffee.min.js", et les sources correctes "sources": ["script.coffee.coffee"].

Option E: TypeScript

Tout comme CoffeeScript, TypeScript nécessite également un processus en deux étapes: TypeScript> Plain JavaScript> JavaScript modifié. Comme le script utilise un plugin jQuery, nous avons besoin de deux fichiers TypeScript déjà fournis: script.typescript.ts et jquery.d.ts.

Étape 1: Tapez TexteScript en JavaScript

Accédez au répertoire "scripts" à partir de la ligne de commande et exécutez la commande suivante:

 $ tsc script.typescript.ts -sourcemap

La commande ci-dessus créera un nouveau fichier JavaScript, appelé script.typescript.js, avec l'URL de mappage source en bas: // @ sourceMappingURL = script.typescript.js.map. Avec cette commande unique, il créera également le fichier map, script.typescript.js.map.

Étape 2: JavaScript simple à JavaScript minifié

Comme dans l'exemple CoffeeScript, l'étape suivante consiste à utiliser UglifyJS..

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

Enfin, assurez-vous que index.html liens vers le fichier de script correct, scripts / script.typescript.min.js, et l'ouvrir dans le navigateur!


Cartes source pour SASS

Au-delà de JavaScript, actuellement, Chrome prend également en charge les cartes sources SASS ou SCSS. Pour le mappage de source SASS, modifions quelques paramètres dans Chrome, puis compilons SASS en CSS avec les paramètres de débogage:

  1. Avant de modifier les paramètres, notez que, lors de l'inspection d'un élément à partir des outils de développement, il ne nous montrera que la référence du fichier CSS. Ce n'est pas trop utile.
  2. Allez sur chrome: // flags /.
  3. Activer les expériences Developer Tools.
  4. Ouvrez Outils de développement> Paramètres> Expériences> Cochez "Prise en charge de SASS"..
  5. Compilez SASS avec les paramètres de débogage suivants dans le répertoire "styles". Cela préfixera chaque jeu de règles CSS avec @media -sass-debug-info qui aura l'information sur le nom de fichier et le numéro de ligne.
     $ cd styles / $ sass --debug-info --watch style.sass: style.css
  6. Assurez-vous de redémarrer les outils de développement et actualisez la page..
  7. Maintenant, lorsque nous inspectons un élément, nous pouvons accéder au fichier SASS d'origine!

Au-delà de la simple visualisation du fichier SASS, si vous exécutez LiveReload en arrière-plan et apportez des modifications au fichier SASS, la page sera également mise à jour pour refléter les modifications. Par exemple, ouvrons le projet dans Firefox et inspectons la page à l’aide de l’extension Firebug..


Informations dans une carte source

Si nous voyons l'un des *.carte fichiers, il contiendra les informations de mappage du fichier d'origine sur le fichier optimisé. La structure d'une carte source est généralement au format JSON, à l'aide des spécifications de la version 3. Il contiendra généralement les cinq propriétés suivantes:

  1. version: Numéro de version de la carte source - généralement "3."
  2. fichier: Nom du fichier optimisé.
  3. sources: Noms des fichiers originaux.
  4. des noms: Symboles utilisés pour la cartographie.
  5. mappages: Cartographie des données.

Ressources supplémentaires

Les cartes sources sont encore en cours de développement, mais d’ores et déjà, d’excellentes ressources sont disponibles sur le Web. Assurez-vous de tenir compte de ce qui suit si vous souhaitez en savoir plus..

  • Introduction à JavaScript Source Cartes de Ryan Seddon, HTML5 Rocks
  • Le point de rupture Episode 3: Cartes JavaScript dans les sources fournies par l'équipe de développeurs Google
  • Le point de rupture Episode 2: Cartes source SASS par l'équipe de développeurs Google
  • Source Maps wiki sur les langues, outils, articles sur Source Maps
  • Cartes source multiniveaux avec CoffeeScript et TypeScript de Ryan Seddon
  • Proposition de cartes source version 3

Conclusion

J'espère que la procédure ci-dessus, utilisant plusieurs compilateurs, a démontré le potentiel des cartes sources. Bien que les fonctionnalités soient actuellement limitées, nous espérons qu’à l’avenir nous aurons une capacité de débogage complète, y compris l’accès aux variables et aux expressions..