当与require.js一起作为AMD模块使用时,覆盖underscore.js默认值

Overriding underscore.js defaults when used with require.js as an AMD module

本文关键字:js underscore 默认值 覆盖 模块 一起 require AMD 当与      更新时间:2023-09-26

由于下划线是作为AMD模块加载的,是否有人有关于如何最好地设置针对下划线的全局选项的建议,以便我仍然可以在相同的统一模块名称下访问它并使我的覆盖可用。

我已经玩了它,到目前为止,我基本上有一个包装器,我包括下划线作为一个依赖关系,做我的修改,然后返回修改的下划线。

paths: {
    'underscore': 'libs/underscore/1.2.3/underscore',
    'underscore-override': 'libs/underscore/define'
}

在define.js中,我基本上有以下内容:

define(['underscore'], function (_) {
    // use mustache syntax
    _.templateSettings = {
        interpolate : /'{'{(.+?)'}'}/g
    };
    return _;
});

这个方法是有效的,但我相信有一个更优雅的方法来实现这一点,这样我就不必使用'underscore-custom'了。

有什么建议吗?

欢呼:-)

更新:根据接受的答案中的建议,我现在做以下操作:

libs/bootstrap.js

define([
    // add custom library defines here
    '../libs/underscore/define'
], function () {
    var libs = [].slice.call(arguments),
        initialize = function () {
            libs.forEach(function (lib) {
                if (typeof lib === 'function') {
                    lib();
                }
            });
        }
    return {
        initialize : initialize
    }
});

libs/强调/定义

define(['underscore'], function(_) {
    return function () {    
        // add custom settings here
    };
});

main.js

require(['libs'], function(libs){
    libs.initialize();
});

你可以有一个配置器模块来加载任何需要配置的东西。

define(['underscore', 'jquery'], function(_, jQuery){
  var setUp = function(){
  // Underscore Configuration
  _.templateSettings = {};
  // jQuery Configuration
  $.someplugin = {};
  };
  return { setUp: setUp }; // or something like that
});
//main.js
define(['configurator'], function(config){
  config.setUp();
});