Source Mapを扱う関連ライブラリのまとめ
この記事はSource Mapに対応した何かを作るためのライブラリとか仕様とかについて調べてメモった記事です。
利用する場合の話はSource Maps 101 – Tuts+ Code Tutorial等 検索すれば色々出てくると思います。
Source Mapとは
- Source Map Revision 3 Proposal – Google ドキュメント
- 仕様
- #JSオジサンで Source Map について話してきました : document
- source mapの概要
- JavaScriptのSource Mapの内部表現について
- Base64の
mappings
部分の仕組み - source-map-visualization ビジュアライズツール
- Base64の
- mozilla/source-map
- source map のコア と言えるモジュール(色々なモジュールが使う)
- source map の生成、source mapファイルからマッピング情報取得
- Compiling to JavaScript, and Debugging with Source Maps ✩ Mozilla Hacks – the Web developer blog
- Const なんとかさん関連のツール群をつかうと、簡単に EcmaScript target の言語をつくれる! – blog.64p.org
- Beyond Source Maps
- SourceMap.next
まずはSource Map Revision 3 Proposalを見て置きましょう。
ConventionsやNotesに参考となる情報が多いはずです。
//@”
から//# sourceURL
という形式に変えた理由や、多段source mapについて書いてあります。
何かを実現したい時、mozilla/source-mapを見てこのAPIで実現できないかを見てましょう。
多くのライブラリは内部的にこのモジュールを使っていて、ちょっとしたラッパーであるケースも多いです。
source mapオブジェクト は色々なモジュールの中で出てきます。
{
// version
"version" : 3,
// Source Map の対象ファイル (*.min.js など)
"file": "out.js",
// sources の基準となるルートパス
"sourceRoot": "",
// ソースファイルへの参照
"sources": ["foo.js", "bar.js"],
// ソースファイルを埋め込む場合に使う
"sourcesContent": [null, null],
// mappings でシンボルリスト
"names": ["src", "maps", "are", "fun"],
// エンコードされたマッピングデータ(対応表)
"mappings": "A,AAAB;;ABCDE;"
}
via #JSオジサンで Source Map について話してきました : document
Utility
多段SourceMapの対応を行うモジュール。 詳しくは多段SourceMapの対応方法とライブラリ | Web Scratchにて解説しています。
- lydell/source-map-resolve
- sourceMappingURL(コードに含まれているsource mapの定義ファイル/データURL)コメントから詳細な情報を取得するモジュール
コード -> source map オブジェクトの詳細情報
function(){...}();
/*# sourceMappingURL=foo.js.map */
のようなコード(とファイルパス)を受け取って、source mapオブジェクト等を取得する。
sourceMapResolve.resolveSourceMap
はsource mapオブジェクトやそのmapファイルへの相対パスをsourcesRelativeTo
で取得出来る。
sourceMapResolve.resolve
は resolveSourceMap
がパスだけなのに対して、ソースの中身(コード自体も)も一緒に取れる。
- lydell/source-map-dummy
- ダミーのsource mapオブジェクトを作成するモジュール
mappings
プロパティを生成する際に、jsとcssは自分自身をtokenに分解してマッピングを作る
- lydell/source-map-url
- sourceMappingURLコメントが入ったコードが対象
- mapファイルのURLを取得
- sourceMappingURLコメントの書き換え
- sourceMappingURLコメントの削除
- sourceMappingURLコメントの前にコードを挿入
- sourceMappingURLコメントにマッチする正規表現の取得
- thlorenz/convert-source-map
- source map の相互変換モジュール
- 入力 : source mapオブジェクト、JSON、Base64、sourceMappingURLコメント、mapファイル
- 変換 : プロパティの追加/削除、
- 出力 : source mapオブジェクト、JSON、base64、sourceMappingURLコメント
- 削除 : sourceMappingURLコメントの削除
結合
- edc/mapcat
- mapファイルを結合するツール/モジュール
- mapファイルを渡す
- mapファイルから変換後ソースしてそれぞれ結合
- source mapのlineを結合するときに、ソースの行数分offsetを足していく
- 結合したソース + 結合したmapファイルを取得
- lydell/source-map-concat
- codeとsource mapを渡して結合するモジュール
code
とmap
を持ったオブジェクトの配列を作るconcat
に渡す- => codeをまとめたjsファイルと、mapをまとめたmapファイルができる
codeとmapが1対1、mapがないjsはlydell/source-map-dummyでダミーを使ってやればいいという方針。
デバッグ
- evanw/node-source-map-support
- V8 stack trace APIとsource mapを使って、スタックトレースの書き方をするnode module
- Node.js+CoffeeScript でソースマップを使ってデバッグを楽にする方法 – てっく煮ブログ
- alinex/node-error
- V8 stack trace APIを使ったスタックトレースの書き換え
- スタックトレース中に該当するコードを入れ込んだり、色付け等を行う。
- source mapにも対応してスタックトレースを書き換える
ツール
- nsams/sourcemap-aware-replace
- mapファイルを元にソースの文字列置換をするCLI
- mapの
file
のソースコードを置換 - mapファイル自体のmappingも更新する
- source-map-visualization
mappings
のビジュアライズツール
AST
- tarruda/sourcemap-to-ast
- source mapオブジェクトを使ってJS ASTの
loc
情報をアップデートする
- source mapオブジェクトを使ってJS ASTの
バリデーション
- ben-ng/sourcemap-validator
- 変換元、変換後、sourcemapファイルを使ってバリデーションする
その他
- Dynamic Source Maps
eval
などで動的にコードを実行する際にsourceMappingURLコメントをいれて動かす話- qfox.nl – Dynamic source maps
- mishoo/UglifyJS2
- mozilla/pretty-fast
- JavaScriptの整形 + sourcemap出力
- chrisdone/sourcemap
- Haskellのsource map実装
- MathieuTurcotte/sourcemap
- Go言語
人
- John Lenz – Google+
- Google/ source mapの仕様策定者
- fitzgen (Nick Fitzgerald)
- source mapの仕様策定者、mozilla/source-mapのメンテナ
- lydell (Simon Lydell)
- source map関連モジュールを色々書いてる
- thlorenz (Thorsten Lorenz)
- source map関連モジュールを色々書いてる
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。