使用Require.js引入Underscore.js 1.13.2时提示_未定义
解决RequireJS加载Underscore 1.13.2后
_未定义的问题 问题原因
Underscore从1.7版本开始调整了AMD模块的实现逻辑:旧版本(比如1.6.0)会同时注册AMD模块和在全局window对象上挂载_变量,而1.13.2这类新版本严格遵循AMD规范,仅通过模块依赖注入的方式提供_,不再自动暴露全局变量。这就是为什么你看到Network里加载成功,但直接用全局_会报错。
解决方案
方案1:显式依赖注入(推荐,符合AMD规范)
在需要使用Underscore的模块或require调用中,把underscore作为依赖声明,通过回调参数获取_变量:
// 模块定义示例 define(['underscore'], function(_) { // 在这里正常使用_ var doubled = _.map([1, 2, 3], function(n) { return n * 2; }); }); // 直接require调用示例 require(['underscore'], function(_) { console.log(_.isEmpty({})); // 正常执行 });
方案2:通过shim配置恢复全局变量(适合兼容旧代码)
如果不想修改大量现有代码,可在RequireJS配置中添加shim,强制让Underscore暴露全局_:
require.config({ paths: { 'underscore': my_folder_path + "/underscore" }, shim: { 'underscore': { exports: '_' } } });
配置后,加载Underscore时会自动把全局的_作为模块导出,你就能像之前1.6.0版本那样直接使用全局_了。
内容的提问来源于stack exchange,提问作者Arshad Rehmani
相关产品推荐
相关产品推荐

