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

Symfony4+Webpack Encore环境下Bootstrap Datepicker报错排查

解决Bootstrap-Datepicker在Symfony4 + Webpack Encore中出现$(...).datepicker is not a function的问题

这个错误本质上是jQuery没有被全局暴露,导致bootstrap-datepicker无法将自身方法挂载到jQuery的原型链上,结合你的配置,我给你一步步梳理解决办法:

1. 修复Webpack Encore的jQuery全局暴露配置

默认情况下,Webpack Encore会把jQuery作为模块化依赖处理,不会自动挂载到window对象上,但bootstrap-datepicker是依赖全局的$/jQuery变量的。

在你的webpack.config.js里添加autoProvidejQuery()配置:

Encore
  // ... 你的其他配置
  .createSharedEntry('vendors', [
    './assets/js/vendors.js'
  ])
  // 新增这一行,自动把jQuery和$暴露到全局
  .autoProvidejQuery()
;

2. 简化datepicker.js的引用路径(避免相对路径出错)

你不需要手动写冗长的相对路径引用node_modules里的文件,Webpack会自动从node_modules中查找包,修改你的datepicker.js:

// 加载datepicker核心JS和意大利语语言包
require('bootstrap-datepicker');
require('bootstrap-datepicker/dist/locales/bootstrap-datepicker.it.min');

// 加载datepicker的CSS
require('bootstrap-datepicker/dist/css/bootstrap-datepicker.css');

'use strict';

$(document).ready(function() {
  $('.datepicker').datepicker({
    language: 'it' // 可以加上语言配置,确保意大利语生效
  });
});

3. 确保页面的JS加载顺序正确

在使用datepicker的页面模板里,要保证先加载共享的vendors.js,再加载你的datepicker.js对应的入口文件(比如如果datepicker是打包在app.js里,那就先加载vendors,再加载app):

{# 先加载共享依赖 #}
<script src="{{ asset('build/vendors.js') }}"></script>
{# 再加载包含datepicker的脚本 #}
<script src="{{ asset('build/app.js') }}"></script>

4. 验证依赖包兼容性(可选但建议)

确保你安装的bootstrap-datepicker是支持Bootstrap4的版本,执行以下命令更新到最新兼容版:

npm install bootstrap-datepicker --save

为什么之前会出错?

你之前的配置中,虽然在vendors.js里引入了jQuery,但Webpack把它封装在了模块作用域里,没有暴露到全局window,导致bootstrap-datepicker加载时找不到全局的jQuery对象,也就无法把datepicker方法挂载到$上,最终出现$(...).datepicker is not a function的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:17:15