bootstrap 5 彻底移除 jquery 依赖,基于原生 api 实现组件;必须使用 bootstrap.bundle.min.js 并将 data-toggle 等属性升级为 data-bs-toggle,否则功能静默失效。

Bootstrap 5 不再需要 jQuery 是事实,不是可选项
Bootstrap 5 确实彻底移除了对 jQuery 的依赖——这不是“兼容旧代码的过渡策略”,而是底层重写的必然结果。所有 JS 组件(Modal、Tooltip、Dropdown 等)现在都基于原生 DOM API 和 Event、CustomEvent、Promise 等现代浏览器能力实现。
这意味着:你引入 jquery-3.6.3.min.js 不会报错,但也不会被 Bootstrap 5 的任何代码调用;它只是白占内存、多发一次 HTTP 请求、增加首屏解析时间。
- 移除
jQuery后,bootstrap.bundle.min.js体积比 v4 小约 12 KB(gzip 后),加载更快 - 不再受
jQuery版本冲突影响(比如你项目里用了jQuery 1.x或3.x插件,和 Bootstrap 4 混用时容易出Uncaught TypeError: $ is not a function) - IE 11 及更老浏览器直接不支持 Bootstrap 5,这是移除
jQuery的前提条件之一——没有它兜底,就得靠浏览器原生能力,而 IE 11 缺失太多
data-bs-toggle 这类属性名变更是依赖解耦的副作用
因为不再走 jQuery 的事件代理和选择器引擎,Bootstrap 5 必须用更明确、更少歧义的方式绑定行为。所以所有 data 属性前缀从 data-toggle 统一升级为 data-bs-toggle,data-target → data-bs-target,data-dismiss → data-bs-dismiss。
这不是“为了改而改”,而是避免和其他 JS 库或自定义脚本发生属性名冲突。例如,某个轮播图插件也用 data-toggle="carousel",v4 下可能被 jQuery 误触发;v5 用 data-bs-toggle,就完全隔离了。
- 如果你复制的是 Bootstrap 4 文档里的 HTML 示例,直接粘贴到 v5 页面中,
Modal就不会弹出——控制台无报错,但点击无效 - 检查元素时能看到
data-toggle="modal",但 Bootstrap 5 的 JS 根本不监听这个属性,只认data-bs-toggle - 迁移时建议全局搜索替换:
data-toggle→data-bs-toggle,data-target→data-bs-target,别漏掉data-dismiss和data-trigger
bootstrap is not defined 错误,90% 是脚本加载顺序或时机问题
Uncaught ReferenceError: bootstrap is not defined 这个错误在 Modal、Tooltip 初始化时高频出现,根本原因不是没引文件,而是 JS 执行得太早。
Bootstrap 5 的 JS 组件必须等 bootstrap.bundle.min.js 加载并执行完毕后,才能访问全局 bootstrap 对象。如果初始化代码写在 里,或没包在 DOMContentLoaded 里,就会失败。
- ✅ 正确做法:把
<script src="...bootstrap.bundle.min.js"></script>放在前,并确保所有初始化逻辑都在它之后 - ❌ 错误写法:
<script>new bootstrap.Modal(...)</script>—— 此时bootstrap还没挂到全局 - ⚠️ 注意:用
async或defer加载bootstrap.bundle.min.js时,必须同步控制初始化脚本的执行时机,否则仍可能报错
Popper 不再需要单独引入,但 bundle 版本必须用对
Bootstrap 5 把 Popper.js 打包进了 bootstrap.bundle.min.js,所以你不需要再额外引入 @popperjs/core。但这也意味着:你必须用 .bundle. 版本,不能只引 bootstrap.min.js。
只引 bootstrap.min.js 的后果是——Dropdown、Tooltip、Popover 全部失效,控制台报 TypeError: Popper is not a constructor,因为这些组件内部调用 Popper.createPopper(),而精简版 JS 文件里压根没打包它。
- CDN 正确链接是:
https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js - npm 安装后正确路径是:
node_modules/bootstrap/dist/js/bootstrap.bundle.min.js - 如果你用构建工具(Vite/Webpack),import 时也要指向
bootstrap/dist/js/bootstrap.bundle.js,不是bootstrap/js/dist/modal.js这类源码路径
事情说清了就结束。最常被忽略的其实是「bundle 版本」和「data-bs- 前缀」这两点——它们不出错,但让功能静默失效,查起来反而更费时间。











