let*_*etz 6 ruby-on-rails fullcalendar stimulusjs fullcalendar-5 ruby-on-rails-7
我已经设法包含 bootstrap 5,没有任何问题,但是当我尝试包含 fullcalendar 时,我在浏览器控制台上收到此错误:
无法加载模块脚本:需要 JavaScript 模块脚本,但服务器以 MIME 类型“text/css”进行响应。根据 HTML 规范对模块脚本强制执行严格的 MIME 类型检查。(主.css:1)
所以看起来库已正确导入,但 css 未正确导入
我的刺激控制器:
import { Controller } from "@hotwired/stimulus"
import moment from "moment"
import { Calendar } from '@fullcalendar/core';
import dayGridPlugin from '@fullcalendar/daygrid';
import timeGridPlugin from '@fullcalendar/timegrid';
import listPlugin from '@fullcalendar/list';
export default class extends Controller {
static targets = [ "calendar" ]
connect() {
console.log(this.calendarTarget)
let calendar = new Calendar(this.calendarTarget, {
plugins: [ dayGridPlugin, timeGridPlugin, listPlugin ],
initialView: 'dayGridMonth',
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,listWeek'
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法我做错了吗?
编辑:看起来与以下内容相关: https ://github.com/rails/rails/issues/44239
小智 2
今天我一直在摆弄这个问题一段时间。我也无法解决 JS 试图引入 CSS 并引发 MIME 类型错误的问题。
不过,我通过供应 CDN 提供的 main.js 文件(在此处引用)成功地让 FullCalendar 与 importmaps 一起运行,然后手动编辑供应文件以将 FullCalendar 函数导出为默认函数。
main.js -> https://cdn.jsdelivr.net/npm/fullcalendar@5.11.0/main.min.js
将其复制到vendor/javascript/fullcalendar.js
将文件固定在 importmap.rb 中:
pin "fullcalendar" # @5.11.0
Run Code Online (Sandbox Code Playgroud)
此时我出现以下错误:
Failed to register controller ... SyntaxError: The requested module 'fullcalendar' does not provide an export named 'default'
Run Code Online (Sandbox Code Playgroud)
编辑新的vendor/javascript/fullcalendar.js 文件并附加到底部:
export default FullCalendar;
Run Code Online (Sandbox Code Playgroud)
然后在刺激控制器中:
import { Controller } from "@hotwired/stimulus"
import FullCalendar from 'fullcalendar';
export default class extends Controller {
connect() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth'
});
calendar.render();
}
}
Run Code Online (Sandbox Code Playgroud)
CSS 是像平常一样通过 application.scss 引入的。