使用 Modernizr 3.0 (alpha),您可以在本地生成自定义构建。这可能会解决上述“过度杀伤”问题 - 尽管我首先并不完全清楚这个问题(但我假设它的大小)。新的 api 提供了一个“构建”方法,您可以将包含您希望包含在构建中的测试的 json 传递给该方法。
我在我的 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
}