JSer.infoでは不定期でレポートという形で、特定のテーマに関する状況をまとめています。
レポートなどの更新情報を知りたい方はRSSやTwitter@jser_infoをフォローしてみてください。
Bundler #1
JavaScriptのコードはモジュールに分けて開発することが一般的です。
ブラウザにおいて、一つずつ<script>
タグでモジュールをロードするのはラウンドトリップやコネクションの問題が発生します。
そのため、多くの場合ブラウザ向けのコードはモジュールをまとめた(bundleした)ファイルを作成して配信します。
その際にモジュールの依存関係などを解決しながらファイルをまとめる"bundler"と呼ばれるツールの動きについてのレポートです。
webpack 2
webpack 2が正式にリリースされています。
webpack 2のドキュメントは webpack.js.org/ の新しいサイトの方にまとめられています。
Migrating from v1 to v2にマイグレーションガイドがあります。
一部設定の名前が変更されていたり、json-loader
がデフォルトとなっていたり既存のconfigを変更する参考になると思います。
今後の機能追加や改善については、投票ツールを通じて決定していくようです。
(投票の重み付けに利用されているOpen Collectiveについてのスライドを書いたので、併せてみるといいかもしれません)
投票のサイトを見ると今のところ次の開発候補としてはScope Hoisting(Rollupインスパイアな最適化)、Typescript周りの改善などが上がっているようです。
Fusebox
Fuseboxという新しいBundlerツールが登場しました。
実際に試してみると、初回のビルドと再ビルド(.fusebox
のキャッシュあり)どちらも高速です。
基本的に設定はJavaScriptのコードとして書くようになっていて、node
で実行するだけです。
また、webpackのように設定としてentryポイントを設定するのではなく、ビルドの設定をするFuseBox.init
と実際にbudnleするものを決めるfuse.bundle
メソッドで分かれています。
const FuseBox = require("fusebox").FuseBox
let fuse = FuseBox.init({
homeDir: "src/",
globals: { default: "myLib"},
outFile: "./out.js"
});
fuse.bundle(">index.js");
そのためコードとして設定を書くgulpとは相性がいいため、公式のサンプルでもgulp内に書いている例を見かけます。
Rollup
大きな変化はありませんが、Rollupは順調に開発中です。
次のIssueも併せてみると面白いかもしれません。
Browserify
Browserify自体を機能追加/改善するアップデートはあまり積極的に行われていません。
@substack以外にPRをマージするOwnerがいないことに起因しています。
元々本体に多くの機能があるわけではなく依存するパッケージに機能が分散しています。
しかし、その依存のアップデートが滞りがちです。
Issue/PRにはNode.js v6>=で追加されたDeprecated Warningや依存するパッケージのDeprecated Warningを解消する些細なものが多く並んでいます。
- https://github.com/substack/node-browserify/pulls
- buffer: discuss future direction of Buffer constructor API · Issue #9531 · nodejs/node
先日、14.0.0がリリースされました。
このリリースでは、Browserifyが利用するbuffer
のpolyfillであるfeross/bufferがアップデートされています。
TypedArray
を使う実装になったため、bufferを含んだコードを変換した場合に、IE10以下では動かなくなります。
IE10以下でも動くようにしたい場合は、古いfeross/bufferを利用する必要があります。
$ npm install buffer@4 --save
$ browserify -r buffer/:buffer main.js > bundle.js
ES modules
MSEdgeとWebKitにES modules(<script type="module">
)が実装されています。
ES modulesとNode.js modulesについては細かな挙動の違いなどが存在します。
詳しくは次の記事を読むと良いです。
- Native ECMAScript modules: the new features and differences from Webpack modules
- Native ECMAScript modules - the first overview
webpack 2やrollupなどはES modulesのコードを直接扱うようになっています。
ES modulesのブラウザ実装が進むにつれ、ES modulesを扱うツールなども増えてくることが予想されます。
Bundlerはそこへ直接関係するツールであるため、今後の動きに注目していく必要があります。
Testing Framework #3
JavaScriptのテスティングフレームワーク周りのレポートです。
MochaがContributorを募集
Mocha needs YOU!
-- https://github.com/mochajs/mocha#mocha-needs-you
Mochaのメンテナンスリソースが足りていないため協力を募集する内容がREADMEにかかれています。
IssueやPull Requestのレビューをしてくれる人やMochaへのテストの追加などをコントリビューションを募集しています。
詳しくはProjectsを見るかGitterでやり取りすると良さそうです。
Sinon.js 2.0へ向けて
Sinon.JS が2.0向けての作業が進められています。
タスクについては次のIssueで管理されています。
The much fabled 2.0 release, that will split Sinon.JS into more modules, tidy up the api, simplify all the dependency boilerplate by using Browserify.
-- 2.0 Milestone
とあるように、(CommonJS)モジュールとして管理されていなかったのを大きくリファクタリングし、それぞれがモジュール化されています。
残りのタスクにはドキュメント系となっているため、そこまで遠くない日に2.0がリリースされるかもしれません。
プレリリース版は既に公開されています。
2016 JavaScript Rising Stars
JavaScriptに関するツールやライブラリのStar増加率をまとめたサイトにおいて、Testing Frameworksについてもまとめられています。
2016年はAVAとJestのStar数が伸びているようです。
AVA will introduce Magic assert
テストフレームワークのAVAはpower-assertを内部的に利用しテスト結果を表示することができます。
現在、そのテスト結果の表示をより分かりやすくしようとmagic-assert
という名前で開発がされています。
JSer.infoでは不定期でレポートという形で、特定のテーマに関する状況をまとめています。
レポートなどの更新情報を知りたい方はRSSやTwitter@jser_infoをフォローしてみてください。