为什么包裹在if语句中的require始终会执行呢?

发布于 2022-09-02 00:43:22 字数 382 浏览 20 评论 0

使用requirejs碰到如下的问题,我希望在IE9以下的版本中加载selectivizr.js,所以我判断了:

if(browser.desktop && browser.msie && browser.versionNumber < 9){
    require('selectivizr');
}

browser是使用的jquery.browser.js插件,但是我用chrome测试发现,无论if表达式返回的是真还是假,require('selectivizr')这句始终会执行。我找遍了github也找不到一个可以简单的条件判断加载的方法,只有一个AMD-feature.js,但是它的使用方法我感觉太复杂了,就没有简单点的办法么?!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

橘虞初梦 2022-09-09 00:43:22
//https://github.com/jrburke/requirejs/blob/master/require.js
var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
    cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g;

define = function(name, callback){
  var deps = [];
  callback.toString()
    .replace(commentRegExp, '')
    .replace(cjsRequireRegExp, function (match, dep) {
      deps.push(dep);
    });
  deps = ['require'].concat(deps);
  //console.log(name, deps, callback);
}

define('demo', function(){
  require('segmentfault.com');
})

以上为关键代码,callback中的requiredefine的时候就会被正则cjsRequireRegExp匹配出来去加载。

无论你的callback如何写,只要是require都会被 load 等待调用

浅浅 2022-09-09 00:43:22

<!--[if IE]>可以吗?

没有伤那来痛 2022-09-09 00:43:22

跟你的条件没有任何关系的,这里你首先要明白requirejs用的是哪一套规范?

requirejs使用的是AMD规范,AMD提倡的是依赖前置,也就是说不管你的require写在什么位置,都会提前加载。这里容易混淆的地方是requirejs还支持“simplified CommonJS wrapping”,也就是类似cmd规范的写法,你可以把require就近写,但是呢,AMD规范所规定的加载机制并不会因此改变,依然会优先加载代码中所有require的文件。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文