JSer.info 200回記念イベントのLT資料
今朝起きたら、万が一のためにLTを準備しておかなければいけないとTwitterに書いてあったので、実装してみました。
ASTを使ったツールは世に溢れいているけど (eslint, jscs, power-assert, istanbul, uglify2...)、
それらのツールを複数組み合わせる場合、
grunt、gulp、browserify、いずれのビルドツールを使っても、Source => AST => Source の再変換が毎回起きて非効率。
参考: 多段SourceMapとASTの現状について話してきた | Web Scratch
一方、asterのような専用ツールもあるが、一般ユーザー(普通のWeb開発者)はそんなツールは使わないし、実際プラグインも増えてない。
そこで、gulp pluginで一般ユーザーが何も気にせず使えて、ASTを引き回せるような "Next logical step" を実装してみた。
- 本家Vinyl Fileが自由な運用なので、世の中では勝手プロパティ追加しまくりだった
- サブクラスじゃなくて、モンキーパッチ&勝手にメソッド書き換えしちゃおう
- 本家がObject.defineProperty()が中心の実装なので若干つらい。
- 各プラグインが期待するパーサーの違い
- esprima, recast, esparse, acorn... 微妙に違うAST JSON
- パーサーに渡すオプション
- パーサーのバージョン: ES6系のシンタックスに対するASTのスキーマは誰がどこで決めてるの?
- 世の中のASTを使ったツールは、ソースを受け取るAPIしか持っていない。 ASTを渡せるAPIがないので、そのままではvinyl-ast対応プラグインが作れない。