require.js shim, export myOwnGlobal name

巧了我就是萌 提交于 2020-01-02 20:20:31

问题


I'm not sure about the use of "exports" on shim config, following the example on the requireJS API, I can use Backbone (B in capital letter) to export it to a global scope. This means that it will be a window object property. But I realized that I'm forced to use that name, and I can't export it by other reference name, ie: "MyGlobalBackbone"

require.config({
  paths: {
    backboneAlias:'backbone'
  },
  shim : {
    backboneAlias : {
      deps : [ 'underscore', 'jquery-1.9.1' ],
      exports  : 'MyGlobalBackbone'
    }
  }
});

require(['backboneAlias'],function(backboneAsAliasDependency){
  console.log(backboneAsAliasDependency);//Loaded Ok
  console.log(MyGlobalBackbone); //Uncaught ReferenceError: MyGlobalBackbone is not     defined 
});

This code only works if I use "Backbone" instead of "MyGlobalBackbone"...


回答1:


Actually you got it the other way around: shimming doesn't export a variable to global scope, it imports it FROM the global scope. The name ("Backbone") was set by Backbone's author, and this is the part you're explaining to RequireJS in shim config element.




回答2:


See it in the API:
http://requirejs.org/docs/api.html#config-shim

Look at this sentence:

//Once loaded, use the global 'Backbone' as the
//module value.

Let's see it in that way, you will understand it:

//Once loaded, use a global variable 'Backbone' that defined by the backbone vendor as the
//module value.




回答3:


You should use map to make an alias.

require.config({
  paths: {
    ...
  },
  shim : {
    ...
  },
  map: {
      '*': {
          'MyGlobalBackbone': 'Backbone'
      }
  }
});

This will allow you to use MyGlobalBackbone instead of Backbone for all (*) modules.



来源:https://stackoverflow.com/questions/17538713/require-js-shim-export-myownglobal-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!