直接通过 CDN 引入 Lodash 的 UMD 版本是最轻量方式,需先加载 再加载 Bootstrap JS;不可用 lodash-es,须避免全量引入、命名冲突及作用域失效问题。

直接通过 CDN 引入 Lodash,不依赖构建工具
Bootstrap 本身不依赖 Lodash,也不提供任何集成机制。想用 _.debounce、_.throttle 或 _.merge 这类函数,最轻量的方式就是单独引入 Lodash 的 UMD 版本(即浏览器全局可用版本),和 Bootstrap 的 CSS/JS 并行加载。
注意顺序:必须先加载 Lodash,再加载 Bootstrap 的 JS(因为 Bootstrap 4+ 的某些插件如 Dropdown 内部会检测 jQuery 和 Popper,但不会用到 Lodash;不过你自己的业务代码若在 DOMContentLoaded 中调用 _.debounce,就得确保 _ 已就绪)。
- 推荐使用 jsDelivr 的 minified UMD 版本:
<script src="https://www.php.cn/link/f5a1d0cc197cca41eaa5035bbffd4841"></script>
- 不要用
lodash-es(ES 模块版)——它不能直接在 script 标签里运行,会报ReferenceError: Cannot access 'lodash' before initialization或export statements are not supported - 如果已用 Webpack/Vite 等打包工具,应改用
import { debounce } from 'lodash'按需引入,避免全量打包 70KB 的lodash.min.js
在 Bootstrap 自定义 JavaScript 中安全调用 Lodash 函数
常见场景是给 input 加防抖搜索、或合并配置对象。此时要确认 _ 全局变量存在,尤其在多脚本混用、异步加载或旧版 IE 中。
- 加一层存在性检查,避免
Uncaught ReferenceError: _ is not defined:if (typeof _ !== 'undefined') {<br> const searchHandler = _.debounce(function() { /* ... */ }, 300);<br>} - Bootstrap 的
data-bs-*属性解析逻辑不识别 Lodash,别试图在 HTML 里写data-bs-title="_escape(title)"—— 这不会执行,只是字符串字面值 - 若用 TypeScript,记得安装类型声明:
npm install --save-dev @types/lodash,否则_.map等函数会提示隐式 any
避免与 Bootstrap 的 jQuery 插件产生命名冲突
Bootstrap 5 已移除 jQuery 依赖,但很多项目仍在用 Bootstrap 4 + jQuery。而 jQuery 的 $ 和 Lodash 的 _ 都是单字符全局变量,虽默认不冲突,但若引入了其他库(如 Underscore.js),可能覆盖 _。
- 用
_.noConflict()把_还给前一个库,改用lodash变量:const lodash = _.noConflict();<br>lodash.debounce(...);
- Bootstrap 4 的
$.fn.modal不会调用_,所以 Lodash 和 jQuery 可共存,无需特殊处理 - 但如果你在
$(document).ready()里用_.defaultsDeep合并配置,要确保 Lodash 加载早于该回调执行 —— 推荐把 Lodash script 放在最顶部
构建时按需引入 Lodash(Webpack/Vite 用户必看)
全量引入 lodash.min.js 会让首屏 JS 增加约 70KB(gzip 后 ~25KB),对移动端很敏感。真正需要的往往只是两三个函数。
- 用
lodash/debounce替代全量导入:import debounce from 'lodash/debounce';<br>// 而不是 import _ from 'lodash';
- Vite 默认支持这种语法;Webpack 需确认没有误配
lodash-webpack-plugin(该插件已过时且易导致_.cloneDeep失效) - 注意路径大小写:
lodash/throttle✅,lodash/Throttle❌(Node.js 文件系统区分大小写,CI 构建可能失败)
Lodash 和 Bootstrap 是各自独立的工具链,所谓“集成”本质是加载顺序 + 作用域管理。最容易被忽略的是:在动态插入 DOM 后(比如用 bootstrap.Modal 弹窗内渲染表单),仍要确保 Lodash 函数在闭包或模块作用域中可访问,而不是只靠全局 _ —— 尤其当启用代码分割或懒加载时。


















