Modernizr 3.0 (アルファ版) では、カスタム ビルドをローカルで生成できます。これにより、前述の「やり過ぎ」の懸念が解決される可能性があります-そもそもその懸念について完全には明確ではありませんが(ただし、サイズが大きいと想定しています)。新しい API は、ビルドに含めたいテストを含む json を渡すことができる 'build' メソッドを提供します。
私は gulp ファイルでこのようなものを使用していますが、gulp は必要ありません。単純なノード スクリプトで十分です。
gulp.task('js:modernizr', function() {
var modConfig = JSON.parse(fs.readFileSync('modernizr-config.json', {
encoding: 'utf8'
}));
modernizr.build(modConfig, function(res) {
fs.writeFileSync('modernizr.js', res);
return true;
});
});
「modernizr-config.json」ファイルの例は次のようになります。
{
"classPrefix": "",
"options": [
"addTest",
"atRule",
"domPrefixes",
"hasEvent",
"html5shiv",
"html5printshiv",
"load",
"mq",
"prefixed",
"prefixes",
"prefixedCSS",
"setClasses",
"testAllProps",
"testProp",
"testStyles"
],
"feature-detects": [
"css/transforms",
"css/transforms3d",
"css/transformstylepreserve3d",
"css/transitions",
"touchevents",
"workers/webworkers",
"history"
]
}
完全な構成ファイルは Modernizr パッケージに含まれています。
このアプローチでは、パッケージ インストーラーを介して適切に管理された Modernizr テスト スイートを利用し、必要に応じてテストを簡単に追加/削除できます。テストが少なくなり、ファイルが明らかに小さくなります。
「setClasses」オプションは、関連するテスト クラスを html に追加しますが、次のように 3.0 非同期イベントを利用することもできます。
Modernizr.on('csstransitions', function(bool) {
if (bool === true) // do transition stuffs
}