Rails 7 Importmap Pins 不兼容的 Jquery 源

Joe*_*hor 7 jquery ruby-on-rails bootstrap-4 import-maps ruby-on-rails-7

问题

为什么 importmaps 命令生成的源不适用于 Bootstrap 4.6.1,但同一版本的 jquery 的修改源可以工作?

问题详情

我使用 importmaps 创建了一个 Rails 7 应用程序来管理 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"
Run Code Online (Sandbox Code Playgroud)

加载网站并查看 Chrome Web Tools 会显示此错误消息,并且下拉菜单和手风琴等 jquery 功能不起作用

Uncaught TypeError: Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.
    at Object.jQueryDetection (bootstrap.min.js:6:2464)
Run Code Online (Sandbox Code Playgroud)

importmap.rb但是,当我手动更新 jquery 源时

pin "jquery", to: "https://ga.jspm.io/npm:jquery@3.6.0/jquery.js"
Run Code Online (Sandbox Code Playgroud)

错误消息已解决并且功能已恢复。

在我看来,来源几乎相同,它们都是 jquery 3.6.0

https://ga.jspm.io/npm:jquery@3.6.0/dist/jquery.js
Run Code Online (Sandbox Code Playgroud)
https://ga.jspm.io/npm:jquery@3.6.0/jquery.js
Run Code Online (Sandbox Code Playgroud)

工作配置

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";
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

小智 2

我有类似的设置,并且有效。使 jQuery 可用于整个页面,将 application.js 中的导入替换为:

import jquery from 'jquery'
window.$ = jquery

import * as bootstrap from 'bootstrap'
window.bootstrap = bootstrap
Run Code Online (Sandbox Code Playgroud)