根据@Tyson Phalp 的建议,这意味着这个 SO question。
我根据您的问题对其进行了调整,并使用 RequireJS 2.1.2 和SHIM configuration对其进行了测试。
这是main.js
文件,这就是 requireJS 配置所在的位置:
require.config({
/* The shim config allows us to configure dependencies for
scripts that do not call define() to register a module */
shim: {
underscoreBase: {
exports: '_'
},
underscore: {
deps: ['underscoreBase'],
exports: '_'
}
},
paths: {
underscoreBase: '../lib/underscore-min',
underscore: '../lib/underscoreTplSettings',
}
});
require(['app'],function(app){
app.start();
});
然后您应该underscoreTplSettings.js
使用您的 templateSettings 创建文件,如下所示:
define(['underscoreBase'], function(_) {
_.templateSettings = {
evaluate: /\{\{(.+?)\}\}/g,
interpolate: /\{\{=(.+?)\}\}/g,
escape: /\{\{-(.+?)\}\}/g
};
return _;
});
因此,您的模块underscore
将包含下划线库和您的模板设置。
从您的应用程序模块中只需要该underscore
模块,以这种方式:
define(['underscore','otherModule1', 'otherModule2'],
function( _, module1, module2,) {
//Your code in here
}
);
我唯一的疑问是我_
两次导出相同的符号,即使这项工作很艰难,我也不确定这是否被认为是一种好的做法。
==========================
替代解决方案:
这也可以正常工作,我想它更干净一点,避免创建和需要额外的模块作为上述解决方案。我已经使用初始化函数更改了 Shim 配置中的“导出”。如需进一步了解,请参阅Shim 配置参考。
//shim config in main.js file
shim: {
underscore: {
exports: '_',
init: function () {
this._.templateSettings = {
evaluate:/\{\{(.+?)\}\}/g,
interpolate:/\{\{=(.+?)\}\}/g,
escape:/\{\{-(.+?)\}\}/g
};
return _; //this is what will be actually exported!
}
}
}