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

toastr.js报TypeError: $ is not a function及AMD包装器需求

解决Toastr报错“$ is not a function”的AMD包装器方案

我完全懂你的困扰——明明已经加载了jQuery,Toastr却还是找不到$,还因为内部的require('jquery')去寻找不存在的dist/jquery.js搞出了新问题。下面给你一套靠谱的解决方案:

先理清问题根源

你提到Toastr里的require('jquery')会请求dist/jquery.js,同事创建空文件后虽然解决了其他错误,但Toastr拿到的是空模块,自然无法正常调用jQuery的方法。本质是Toastr的模块依赖路径和你项目里实际的jQuery路径不匹配,导致它拿不到正确的jQuery实例。

方案1:创建AMD包装器返回现有jQuery

这是最直接的解决方式,给Toastr要找的dist/jquery.js写一个包装器,让它返回你项目里已加载的jQuery:

  1. 先删除之前同事创建的空dist/jquery.js文件,避免干扰
  2. 在project/jspm_packages/npm/toastr@2.1.2/dist/目录下(如果dist文件夹不存在就手动新建)创建真正的jquery.js,内容如下:
// AMD格式的包装器,返回已加载的jQuery实例
define(function() {
    // 优先取全局的jQuery,也可以根据你项目的实际情况调整
    return window.jQuery || window.$;
});

如果你的jQuery是通过模块加载器加载的(而非全局暴露),可以改成:

define(['jquery'], function($) {
    return $;
});

方案2:用模块加载器映射(更推荐)

直接修改Toastr的依赖映射,避免手动创建文件,也不用改Toastr源码:
在你的项目jspm.config.js(或对应的模块配置文件)里添加映射规则,把Toastr依赖的jquery指向你项目里实际的jQuery文件路径:

System.config({
  map: {
    // 把toastr要找的"jquery"映射到你实际的jQuery模块路径
    "toastr/jquery": "npm:jquery@x.x.x/dist/jquery.js"
  }
});

替换x.x.x为你项目里jQuery的实际版本号,这样Toastr内部的require('jquery')就会直接加载正确的jQuery模块,不用再去dist目录找不存在的文件了。

额外提醒

尽量不要直接修改Toastr的源码(你之前修改了470行的逻辑),这样后续升级Toastr版本时会面临代码合并的麻烦,用上面的依赖映射或包装器方案,既能解决问题,又能保持第三方库的源码干净。

内容的提问来源于stack exchange,提问作者螠enela慰s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:02:31