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

Laravel 9替换Mix为Vite后Fullcalendar无法正常运行

解决Laravel 9 + Vite下FullCalendar无法运行的问题

问题分析

你遇到的两个错误根源分别是:

  1. Uncaught Error: Please import the top-level fullcalendar lib before attempting to import a plugin. —— 插件导入依赖顺序错误,部分FullCalendar插件需要先加载核心库的完整导出
  2. Uncaught ReferenceError: Calendar is not defined —— 全局挂载遗漏了部分对象,同时存在Vite模块加载时机的适配问题

修复步骤

1. 修正resources/js/app.js的导入与全局挂载

先导入FullCalendar核心库的完整模块,同时把所有用到的插件和类都挂载到window对象(包括之前遗漏的rrulePlugin):

// 先导入核心库完整模块,确保插件能识别依赖
import '@fullcalendar/core';
import { Calendar } from "@fullcalendar/core";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import listPlugin from "@fullcalendar/list";
import interactionPlugin from "@fullcalendar/interaction"; // 变量名重命名,避免和模块名混淆
import rrulePlugin from "@fullcalendar/rrule";
import deLocale from "@fullcalendar/core/locales/de";

// 全局挂载所有需要在模板中调用的对象
window.Calendar = Calendar;
window.dayGridPlugin = dayGridPlugin;
window.timeGridPlugin = timeGridPlugin;
window.listPlugin = listPlugin;
window.interactionPlugin = interactionPlugin;
window.rrulePlugin = rrulePlugin;
window.deLocale = deLocale;

2. 修正Blade模板中的代码

调整插件引用名称,同时确保Vite编译的资源被正确引入:

<!-- 必须在模板中引入Vite编译的app.js,放在页面头部或合适位置 -->
@vite('resources/js/app.js')

<div id='calendar'></div>

@push('scripts')
    <script>
        // 若依赖Livewire则保留livewire:load,否则用DOMContentLoaded确保资源加载完成
        document.addEventListener('livewire:load', function() {
            var calendarEl = document.getElementById('calendar');
            var calendar = new Calendar(calendarEl, {
                // 修正插件引用为全局挂载的变量
                plugins: [dayGridPlugin, timeGridPlugin, listPlugin, rrulePlugin, interactionPlugin],
                initialView: "timeGridWeek",
                locale: deLocale,
                events: [],
            });

            calendar.render();
        });
    </script>
@endpush

3. 重新编译资源

执行Vite命令完成代码编译:

# 开发环境
npm run dev
# 生产环境
npm run build

额外说明

  • FullCalendar部分插件(如rrule)依赖核心库的全局初始化,提前导入@fullcalendar/core完整模块可避免依赖错误
  • 所有在Blade模板中用到的变量,必须确保已挂载到window对象,不能遗漏
  • 若使用Livewire,livewire:load事件监听可保留,但要保证Vite资源在Livewire初始化前完成加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:31:09