2016-11-11 61 views
0

我用來鏈接庫:require.js墊片用於LIB的jQuery,提線木偶,骨幹,強調

shim: { 
    backbone: { 
     deps: ["jquery", "underscore"], 
     exports: "Backbone" 
    }, 
    marionette: { 
     deps: ["backbone"], 
     exports: "Marionette" 
    }, 
    angular: { 
     exports: "angular" 
    } 
} 

,但現在我已閱讀這些庫採用了AMD,並且不需要墊片財產!是嗎?

main.js

paths: { 
    marionette: "backbone.marionette" 
} 

some.js

define("util", 

     ['marionette'], 
     function(Marionette){ 
      //test arguments! 
      //console.log($) 
      //console.log(jQuery) 
      //console.log(Backbone) 
      //console.log(_) 
      console.log(Marionette) //exist! 

     } 
); 

回答

1

如果第三方腳本不兼容AMD必須使用shims

如果在上面的代碼確實有這樣的事情你可能會檢查腳本是AMD兼容:

(function(root, factory) { 

    // Set up Backbone appropriately for the environment. Start with AMD. 
    if (typeof define === 'function' && define.amd) { 
    define(['underscore', 'jquery', 'exports'], function(_, $, exports) { 
     // Export global even in AMD case in case this script is loaded with 
     // others that may still expect a global Backbone. 
     root.Backbone = factory(root, exports, _, $); 
    }); 

    // Next for Node.js or CommonJS. jQuery may not be needed as a module. 
    } else if (typeof exports !== 'undefined') { 
    var _ = require('underscore'), $; 
    try { $ = require('jquery'); } catch(e) {} 
    factory(root, exports, _, $); 

    // Finally, as a browser global. 
    } else { 
    root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$)); 
    } 

}(this, function(root, Backbone, _, $) { 
    // .... 
} 

這裏是什麼樣子,例如配置文件在我的項目之一:

shim: { 

    // jQuery Mobile 
    "jquerymobile": ["jquery"], 

    // Twitter Bootstrap jQuery plugins 
    "bootstrap": ["jquery"], 

    // jQueryUI 
    "jqueryui": ["jquery"], 

    // jQuery Cookie 
    "jquery.cookie": { 
     deps: ["jquery"], 
     exports: "jquery.cookie" 
    }, 

    // jQuery easing functions 
    "jquery.easing" : { 
     deps: ["jquery"], 
     exports: "jquery.easing" 
    }, 

    // Shim backbone to resolve conflicts on minification 
    "backbone": { 
     deps: ['underscore', 'jquery'], 
     init: function(_, $) { 
      return this.Backbone = Backbone.noConflict(); 
     } 
    }, 

    // Backbone.validateAll plugin that depends on Backbone 
    "backbone.validateAll": ["backbone"], 

    "backbone.paginator" : { 
     deps: ["backbone"], 
     exports : "Backbone.Paginator" 
    }, 

    "backgrid" : { 
     deps : ['jquery', 'underscore', 'backbone'], 
     exports: "Backgrid" 
    }, 

    "backgrid.paginator" : { 
     deps: ["backbone", "backgrid"], 
     exports : "Backgrid.Paginator" 
    } 

} 
+0

Backbone在默認情況下不需要墊片,但在這種情況下,如果您不想使用全局,shim'init'很好。 –