npm + webpack + babel をベースとして開発に必要なものを揃えています。
種類 | ツール |
---|---|
タスクランナー | npm |
ビルド | webpack |
開発用ウェブサーバー | webpack-dev-server |
トランスラパイラ | babel (ES2015+, JSX) |
スタイルシート | scss (node-sass = libsass) |
パッケージ管理 | npm、bower(オプション) |
テストフレームワーク | mocha + power-assert |
カバレッジ | nyc (istanbul cli) |
ブラウザテストランナー | karma, karma-coverage |
構文チェック | eslint |
メトリクス計測 | plato |
サンプルとしてReactも組み込んでいます。
おまけ MacOSX上のatomでlinter-eslintプラグインが正常に動作することを確認済み
タスクランナーとしてnpm scriptsを使用しています。Grunt/Gulpは使用していません。
フロントエンド向けのビルドツールとしてwebpackを使用しています。これはブラウザで動かす時に使用されます。
babelをトランスラパイラとしてだけでなく汎用的なコード変換ツールとして捉えて、 babelプラグインでpower-assertとカバレッジ用のコード変換も行っています。
ブラウザを使わないテストではnode上のmochaで実行されます。
ブラウザを使ったテストはkarmaを使って各ブラウザ(デフォルトはPhantomJSのみ)上のmochaで実行されます。
- webpack実行 [設定ファイル: webpack.config.js]
- babel実行 (babel-loader)
- その他ローダー実行 (css-loader, sass-loader, style-loader, json-loader) ※オプション
- bowerモジュールの結合処理 (webpack.ResolverPlugin) ※オプション
- babel実行 [設定ファイル: .babelrc]
- ES6変換 (babel-preset-latest)
- プロジェクトパス解決 (babel-plugin-module-resolver)
- bowerモジュールのパス解決 (babel-plugin-resolve-bower-module) ※オプション
テストの場合は1を飛ばして「2. mocha実行」から開始
- nyc実行 [設定ファイル: .nycrc]
- mocha実行 [設定ファイル: mocha.opts]
- babel実行 (--compilers js:babel-core/register)
- instrument追加 (babel-plugin-istanbul)
- babel実行
- ビルド、開発用ウェブサーバー」の内容
- power-assert変換 (babel-preset-power-assert)
- instrumentコード埋め込み (babel-plugin-istanbul)
- karma実行 [設定ファイル: karma.conf.js]
- webpack実行 (karma-webpack)
- PhantomJS実行(karma-phantomjs-launcher)
- mocha実行 (karma-mocha)
- カバレッッジ実行 (karma-coverage)
- eslint実行 [設定ファイル: .eslintrc.yaml]
- nodeモジュールのパス解決 (eslint-import-resolver-node)
- bowerを使用する場合はeslint-import-resolver-webpackを使ってbowerのモジュールのパスをwebpack経由で解決 ※オプション
- plato実行 (特に依存するものはない)
webpack-dev-server
karma
テストが全くされてないファイルがカバレッジに含まれない
Grunt / Gulp 用のプラグインが間に入るためそれぞれのバージョンの連携が大変になるため。 それぞれのツールが用意しているコマンドを直接またはnpm scripts経由で実行する方法を採用
istanbulをbabelを使ってES6対応にしたもの。メンテナンス終了につきbabel-plugin-istanbulを使用する方法を採用
babel-plugin-istanbulはbabelのプラグインとして動作し、babelの変換時にカバレッジ用のinstrumentsを追加している。 これにより既存のnyc、karma-coverageでカバレッジ計測が可能になる。
参考 http://dev.topheman.com/es6-code-coverage-with-babel-plugin/
非推奨となったのでbabel-preset-power-assertを採用
babel-preset-power-assertはbabelのプラグインとして動作し、babelの変換時にpower-assert用のコード変換を行っている。
参考 http://efcl.info/2016/04/14/espower-babel-is-deprecated/
- 2016-10-15 nycの設定をpackage.jsonから.nycrcに移動