问题
为什么使用importmaps命令生成的源代码无法与Bootstrap 4.6.1配合使用,但是同样版本的jquery的修改后源代码可以工作?
问题细节
我创建了一个rails 7应用程序,使用importmaps来管理javascript.
我手动将一个旧版本的Bootstrap(4.6.1)固定在importmap.rb
中。
当我运行bin/importmap pin jquery
时,以下内容将添加到importmap.rb
中:
pin "jquery", to: "https://ga.jspm.io/npm:jquery@3.6.0/dist/jquery.js"
加载网站并查看Chrome Web工具时,显示此错误消息,jQuery功能(如下拉菜单和手风琴)不能正常运行。
Uncaught TypeError: Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.
at Object.jQueryDetection (bootstrap.min.js:6:2464)
然而,当我手动更新 importmap.rb
中的jquery源代码时,如下:
pin "jquery", to: "https://ga.jspm.io/npm:jquery@3.6.0/jquery.js"
错误消息已解决,功能已恢复。
在我看来,这些来源几乎相同,它们都是jQuery 3.6.0。
https://ga.jspm.io/npm:jquery@3.6.0/dist/jquery.js
https://ga.jspm.io/npm:jquery@3.6.0/jquery.js
工作配置
application.js
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
import { Turbo } from "@hotwired/turbo-rails"
Turbo.session.drive = false
import "controllers"
import "jquery";
import * as bootstrap from "bootstrap";
importmap.rb
pin "application", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
pin "jquery", to: "https://code.jquery.com/jquery-3.6.0.min.js", preload: true
pin "bootstrap", to: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js"
pin "@popperjs/core", to: "https://ga.jspm.io/npm:@popperjs/core@2.11.2/lib/index.js"