在浏览器中运行时,可指定路径的备选(fallbacks),以实现诸如首先指定了从CDN中加载,一旦CDN加载失败则从本地位置中加载这类的机制。
shim: 为那些没有使用define()来声明依赖关系、设置模块的"浏览器全局变量注入"型脚本做依赖和导出配置。
下面有个示例,它需要 RequireJS 2.1.0+,并且假定backbone.js、underscore.js 、jquery.js都装于baseUrl目录下。如果没有,则你可能需要为它们设置paths config:
requirejs.config({ //Remember: only use shim config for non-AMD scripts,scripts that do not already call define(). //The shimconfig will not work correctly if used on AMD scripts, //in particular, the exports and init config will notbe triggered, and the deps config will be confusingfor those cases. shim: { 'backbone': { //These script dependencies should be loaded before loadingbackbone.js|译|在加载backbone.js之前应先加载它的依赖函数underscore.js和jquery.js deps: ['underscore', 'jquery'], //Once loaded, use the global 'Backbone' as themodule value.|译|加载完毕后该模块使用的引用名 exports: 'Backbone' }, 'underscore': { exports: '_' }, 'foo': { deps: ['bar'], exports: 'Foo', init: function (bar) { //Using a function allows you to call noConflict forlibraries that support it, and do other cleanup. //However, plugins for those libraries may still want a global. //"this" for the function will be the global object. //The dependencies will be passed in as function arguments. //If this function returns a value,then that value is used as the module export valueinstead of the object found via the 'exports' string. //Note: jQuery registers as an AMD module via define(),so this will not work for jQuery. //See notes sectionbelow for an approach for jQuery. return this.Foo.noConflict(); } } } }); //Then, later in a separate file, call it 'MyModel.js', a module is defined,specifting 'backbone' as a dependency. //RequireJS will use the shim config to properly load 'backbone' and give a local reference to this module. //The global Backbone will still exist on the page too. define(['backbone'], function (Backbone) { return Backbone.Model.extend({}); });
RequireJS 2.0.*中,shim配置中的"exports"属性可以是一个函数而不是字串。这种情况下它就起到上述示例中的"init"属性的功能。 RequireJS 2.1.0+中加入了"init"承接库加载后的初始工作,以使exports作为字串值被enforceDefine所使用。
那些仅作为jQuery或Backbone的插件存在而不导出任何模块变量的"模块"们,shim配置可简单设置为依赖数组:
requirejs.config({ shim: { 'jquery.colorize': ['jquery'], 'jquery.scroll': ['jquery'], 'backbone.layoutmanager': ['backbone'] } });
内容版权声明:除非注明,否则皆为本站原创文章。