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

导入@fullcalendar/core模块时出现TypeError错误求助

解决FullCalendar模块导入错误:Uncaught TypeError: Failed to resolve module specifier

浏览器原生ES模块系统不支持直接导入@fullcalendar/core这类npm裸包标识符,仅识别以/、./、../开头的相对/绝对路径。以下是三种可行的解决方法:

方案1:使用Laravel Vite(推荐,Laravel 9+默认)

Vite会自动处理npm包的模块解析,步骤如下:

  1. 将你的availability.js文件移至resources/js/admin_system/目录(符合Laravel资源管理规范),或在resources/js/app.js中导入它:
    // resources/js/app.js
    import './admin_system/availability.js';
    
  2. 确保vite.config.js配置正确(默认配置即可适配多数场景)。
  3. 替换Blade模板中的原有script标签,改用Vite指令引入资源:
    @vite(['resources/js/app.js'])
    
  4. 运行开发命令npm run dev,或生产环境构建命令npm run build,Vite会自动打包所有依赖并解析模块路径。

方案2:改用FullCalendar UMD版本(无需打包工具)

直接引入UMD格式的脚本,使用全局变量替代ES模块导入:

  1. 将node_modules/@fullcalendar/core/main.min.css、node_modules/@fullcalendar/core/main.min.js、node_modules/@fullcalendar/interaction/interaction.min.js复制到public/vendor/fullcalendar/目录下。
  2. 在Blade模板中引入样式和脚本:
    <link rel="stylesheet" href="{{ asset('vendor/fullcalendar/main.min.css') }}">
    <script src="{{ asset('vendor/fullcalendar/main.min.js') }}"></script>
    <script src="{{ asset('vendor/fullcalendar/interaction.min.js') }}"></script>
    
  3. 修改availability.js,去掉import语句,改用全局变量:
    document.addEventListener('DOMContentLoaded', function() {
      let draggableEl = document.getElementById('mydraggable');
      let calendarEl = document.getElementById('mycalendar');
      let calendar = new FullCalendar.Calendar(calendarEl, {
        plugins: [FullCalendar.interaction],
        droppable: true
      });
      calendar.render();
      new FullCalendar.Draggable(draggableEl);
    });
    
  4. 引入该JS文件时去掉type="module"属性:
    <script src="{{ url('/admin_system/js/availability.js') }}"></script>
    

方案3:使用浏览器原生Import Maps(需注意兼容性)

通过Import Maps映射裸模块到实际文件路径:

  1. 将node_modules/@fullcalendar/core/index.esm.js、node_modules/@fullcalendar/interaction/index.esm.js复制到public/vendor/fullcalendar/目录下。
  2. 在Blade模板的<head>中添加Import Map配置:
    <script type="importmap">
    {
      "imports": {
        "@fullcalendar/core": "{{ asset('vendor/fullcalendar/core/index.esm.js') }}",
        "@fullcalendar/interaction": "{{ asset('vendor/fullcalendar/interaction/index.esm.js') }}"
      }
    }
    </script>
    
  3. 保持原有type="module"的script引入方式,浏览器会通过Import Map解析模块路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:14:58