You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:23:28