首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用requirejs预加载多填充库

使用requirejs预加载多填充库
EN

Stack Overflow用户
提问于 2014-08-22 18:22:33
回答 2查看 4.9K关注 0票数 1

我正在使用wirejs创建一个requirejs应用程序。对于IE8,我使用的是polyfills:cujo/poly js库,并要求在加载wirejs之前预先加载这个库。

如果我使用curl作为AMD加载程序,根据文档,我可以使用以下选项:

代码语言:javascript
复制
curl({ preloads: [ "poly" ] });

对我有用的是:

代码语言:javascript
复制
// in index.html

<script data-main="js/app" src="js/lib/require.js"></script>

// in js/app.js

define(function(){
   // set configuration options
   requirejs.config({// set config with paths});

   // require the library and HOPE it will load before
   // everything else!
   require(['poly']);

});

本文件建议为此目的使用shim配置。不过,我还不知道怎么做。我尝试过的一些事情:

代码语言:javascript
复制
// DID NOT WORK!!
requirejs.config({

....
"shim": {
   "poly": {
     "exports": "poly"
    }
 }
});

有没有更好的方法来解决这个问题?

感谢您的任何帮助!...thanks为您的时间!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-22 19:09:49

我确实使用了RequireJS和多填充,但是我不使用RequireJS来加载它们。多边形填充的目标是使缺乏features的浏览器看起来似乎具有特性X。我更喜欢这样一种设置,在这种设置中,我运行的代码(除了多边形填充本身)都使用已经加载的运行,这样代码运行的特性与它可以使用的功能集相同,无论哪个浏览器运行代码。因此,我也希望在RequireJS之前加载我的多填充。

但是,如果我们忽略了这个首选项,那么RequireJS是否可以用来加载聚合填充呢?是的,但是RequireJS不会让事情变得容易。没有一种简单的方法可以告诉RequireJS“在加载任何其他之前必须加载这部分代码”,这正是您希望使用的聚合填充。您需要做的是手动调用require,以便首先加载您的填充。您的index.html可能类似于:

代码语言:javascript
复制
<script>
    require = {
       // Your config.
       //
       // Setting a global require before loading RequireJS is one way to give it
       // a config.
    };
</script>
<script src="js/lib/require.js"></script>
<script>
    // No data-main above...
    //
    // This double require ensures that the polyfills are loaded first.
    require(["poly"], function () {
        require(["js/app"]);
    });
</script>

js/app.js变成:

代码语言:javascript
复制
define(function(){
    // whatever...
});

js/app以外可能有多个入口点的大型应用程序中,每次从RequireJS模块外部加载模块时,都必须使用双重要求,如上面所示,以确保首先加载多填充。

票数 5
EN

Stack Overflow用户

发布于 2015-05-19 21:31:14

我遇到了同样的问题,我的解决方案是让Require.js作为我的依赖项加载多填充。您可以在这个要旨中看到我是如何结合Conditioner.js解决这个问题的,但是没有它的解决方案是一样的。

我选择了检测加载填充的特性,这样新的浏览器就不会发出不必要的请求。特征检测使得这个特定的解决方案更优越。

在你的index.html

代码语言:javascript
复制
<script src="/js/require.js" data-main="/js/main"></script>

在文件/js/main.js

代码语言:javascript
复制
var _polyfills = [];
if (!('classList' in document.documentElement)) {
    _polyfills.push('polyfills/classList');
}
// ... more feature detects & polyfills ...

require(['bootstrap'].concat(_polyfills), function(bootstrap) {
    bootstrap.run(); // Bootstrap your app here!
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25453351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档