使用requirejs预加载polyfill库

Vik*_*ram 1 requirejs polyfills wirejs

我正在创建一个wirejs应用程序requirejs.对于IE 8,我使用polyfills:cujo/polyjs库并要求在加载之前预先加载此lib wirejs.

如果我用作curlAMD加载器,根据文档,我有以下选项:

curl({ preloads: [ "poly" ] });
Run Code Online (Sandbox Code Playgroud)

对我有用的是:

// 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']);

});
Run Code Online (Sandbox Code Playgroud)

本文档建议使用shimconfig来实现此目的.但是,我还没弄清楚如何.我试过的一些事情:

// DID NOT WORK!!
requirejs.config({

....
"shim": {
   "poly": {
     "exports": "poly"
    }
 }
});
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示赞赏!...感谢您的时间!

Lou*_*uis 5

我确实将RequireJS与polyfill一起使用,但我没有使用RequireJS来加载它们.polyfill的目标是使缺少X特征的浏览器看起来好像它实际上具有X特征.我更喜欢一种设置,其中我运行的所有代码(除了polyfills本身)都已经与polyfill一起运行加载,以便代码运行时具有相同的功能集,无论哪个浏览器运行代码.所以我想在RequireJS之前加载我的polyfill.

但是如果我们忽略这个偏好,可以使用RequireJS加载polyfill吗?是的,但RequireJS不会让事情变得简单.告诉RequireJS没有简单的方法"在加载任何其他东西之前必须加载这个代码体",这就是你想要的polyfill.您需要做的是手动调用,require以便首先加载您的polyfill.你index.html可能是这样的:

<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>
Run Code Online (Sandbox Code Playgroud)

js/app.js 变为:

define(function(){
    // whatever...
});
Run Code Online (Sandbox Code Playgroud)

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