How to mixin Underscore plugins in RequireJS?

后端 未结 3 700
自闭症患者
自闭症患者 2020-12-28 09:28

What is the right way to execute code on Underscore when it gets loaded? I am trying to execute the below code to extend the _ exported namespace automatically when modules

3条回答
  •  滥情空心
    2020-12-28 10:22

    Battling with this for hours before i understand what i was doing wrong

    This is what i did wrong

    You should not rename the file underscore.string in main.js

    even though in my library i did rename the file in paths i name it back to 'underscore.string'

    This is how your main.js should look like

    require.config({
    paths: {
        underscore: 'lib/underscore', 
        'underscore.string' : 'lib/_string' ,
    },
    shim: { 
        underscore: {
            exports: '_', 
            deps: [ 'jquery', 'jqueryui' ]
        }, 
        'underscore.string': { 
            deps: [ 'underscore' ]
        },
    } 
    ....
    

    You could then either add it as dependency with in your shim like i did for my mixin file

    shim: { 
        mixin : {
            deps: [ 'jquery',  'underscore', 'underscore.string' , 'bootstrap'  ] 
        },  
    

    Or just define it in your different pages like

    /*global define */
    define([    
        'underscore.string'
    ], function ( ) {   
    

    it just work now you can access it through _.str or _.string

    This is why you should do it this way and not try to name it something else

    on line 663 of underscore.string.js

      // Register as a named module with AMD.
      if (typeof define === 'function' && define.amd)
        define('underscore.string', [], function(){ return _s; });
    

    Which means that it will only register it with AMD require JS if you are defining 'underscore.string'

    For Mix in you could just with define

     /*global define */
    define([     
        'underscore',
        'underscore.string'
    ], function ( ) {   
      _.mixin(_.str.exports());
    

提交回复
热议问题