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

Symfony7+Bootstrap5.3下拉菜单失效:i.createPopper is not a function

Symfony 7 + Bootstrap 5.3下拉菜单失效问题(控制台报错i.createPopper is not a function)

开发基于Symfony 7、使用Bootstrap 5.3的网站,其他功能正常,但下拉菜单点击无任何反应,控制台输出错误:

Uncaught TypeError: i.createPopper is not a function

下拉菜单HTML结构:

<li class="nav-item dropdown">
  <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
    Dropdown link
  </a>
  <ul class="dropdown-menu">
    <li><a class="dropdown-item" href="#">Action</a></li>
    <li><a class="dropdown-item" href="#">Another action</a></li>
    <li><a class="dropdown-item" href="#">Something else here</a></li>
  </ul>
</li>

通过AssetMapper安装Bootstrap,importmap.php配置:

<?PHP
return [
    'app' => [
        'path' => './assets/app.js',
        'entrypoint' => true,
    ],
    '@hotwired/stimulus' => [
        'version' => '3.2.2',
    ],
    '@symfony/stimulus-bundle' => [
        'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js',
    ],
    '@hotwired/turbo' => [
        'version' => '7.3.0',
    ],
    '@popperjs/core' => [
        'version' => '2.11.8',
    ],
    'bootstrap' => [
        'version' => '5.3.3',
    ],
    'bootstrap/dist/css/bootstrap.min.css' => [
        'version' => '5.3.3',
        'type' => 'css',
    ],
    'bootstrap/dist/js/bootstrap.min.js' => [
        'version' => '5.3.3',
    ],
    'bootstrap-icons/font/bootstrap-icons.min.css' => [
        'version' => '1.11.3',
        'type' => 'css',
    ],
    '@fortawesome/fontawesome-free/css/all.css' => [
        'version' => '6.7.2',
        'type' => 'css',
    ]
];

app.js内容:

import './bootstrap.js';
/*
 * Welcome to your app's main JavaScript file!
 *
 * This file will be included onto the page via the importmap() Twig function,
 * which should already be in your base.html.twig.
 */
import './styles/app.css';

// Import Popper.js
import '@popperjs/core';

// Import everything related to Bootstrap
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap/dist/js/bootstrap.min.js';
import 'bootstrap-icons/font/bootstrap-icons.min.css';

// Import font awesome
import '@fortawesome/fontawesome-free/css/all.css';

console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉');

修复方案

1. 修正Popper.js导入方式

Bootstrap 5需要Popper.js暴露全局变量才能正常调用createPopper方法,修改app.js中的Popper导入代码:

// 替换原有的import '@popperjs/core';
import * as Popper from '@popperjs/core';
window.Popper = Popper;

2. 优化Bootstrap JS导入(推荐)

使用Bootstrap的ES模块版本替代单独的min.js文件,这样会自动处理Popper依赖:

// 替换原有的import 'bootstrap/dist/js/bootstrap.min.js';
import 'bootstrap';

同时可以删除importmap.php中bootstrap/dist/js/bootstrap.min.js的配置项,避免冗余。

3. 清理缓存确保生效

执行以下命令清理Symfony缓存并重新编译资产:

php bin/console cache:clear
php bin/console asset-map:compile

内容的提问来源于stack exchange,提问作者Raphael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:04:55