如何在Require.js中使用来自Foundation 4的Zeptos和来自Yeoman的Grunt

时间:2013-03-14 19:20:06

标签: jquery requirejs zurb-foundation zepto

我刚刚使用Require.js让基础4与Yeoman一起工​​作。我在Require.js中用于main.js的要点是:https://gist.github.com/lkbgift/5164200

Foundation 4的index.html使用以下脚本调用Zepto:

<script>
  document.write('<script src=' +
  ('__proto__' in {} ? 'js/vendor/zepto' : 'js/vendor/jquery') +
  '.js><\/script>')
</script>

在require.js中,您可以像那样声明jquery路径:

paths: {
  jquery: '../components/jquery/jquery'
},

集成zepto代码的正确方法是什么?

ps:有史以来最令人费解的头衔。

2 个答案:

答案 0 :(得分:2)

如果您正在使用require,我认为使用require加载所有脚本可能是有意义的,只是为了保持一致性。

您发布的Foundation 4代码为支持 proto 属性的浏览器加载了Zepto,为其他人提供了jQuery(根据this page只支持IE)。

如果您乐意将Zepto推送给所有人(可能您不需要支持IE),您只需将您从require配置发布的代码更新为指向Zepto而不是jQuery。或者你可以把jQuery推送给每个人。当我看到Zepto时,简而言之,它似乎并没有真正提供jQuery(参见性能测试here)。

如果要在require配置中保留Foundation 4逻辑,可以在this require.js github issues page上找到一个示例,演示如何有条件地加载文件。

答案 1 :(得分:2)

在您正在配置require的main.js函数中,创建一个名为isModern的新函数或类似的函数。让此函数返回 proto 评估(bool)的结果。像这样:

function isModern() { return ( __proto__ in {} ); }

在你的路径配置中,将'jquery'路径配置更改为'libdom'或类似的东西。像这样配置libdom:

paths: {
    'libdom': (isModern()) ? 'your path to zepto' : ' your path to jquery'
},

... ...

现在,不是将'jquery'传递给require({...});而是传递'libdom',它将是Zepto或jQuery,具体取决于isModern的结果。