为了争论,假设我想默认加载 Zepto,但使用 jQuery 代替 IE(所有版本)。
使用 Require.js 时,什么是明智的做法?
有两种方法:“适当”但很长和“花招”但很短。
“正确”但很长:
require.config({
paths: {
jquery:'path/to/jquery'
, zepto: 'path/to/zepto'
}
})
var iNeed = []
if (!('__proto__' in {})) {
// This is IE
iNeed.push('jquery')
} else {
// Everything else
iNeed.push('zepto')
}
require(iNeed, callback)
“花招”但简短:
var AMDConfig = {
paths: {
jquery:'path/to/zepto'
}
}
if (!('__proto__' in {})) {
// This is IE
AMDConfig.paths.jquery = 'path/to/jquery'
}
require.config(AMDConfig)
require(['jquery'], callback)
“花招”不“正确”的原因是您掩盖了“jquery”背后的真实本质随着您的应用程序的发展,一些 jQuery 插件可能会出现并且无法在 zepto 上运行,但它不会立即弄清楚问题所在。
“正确”的解决方案在一个方面也是一个问题——如果您动态定义需求数组,构建工具r.js
将无法找到您放置在那里的其他依赖项。
你的选择..