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

Rails 7.2.2.1使用Importmaps时重复加载JavaScript文件的问题求助

Rails 7.2.2.1使用Importmaps时重复加载JavaScript文件的问题求助

我目前在用Rails 7.2.2.1开发项目,用Importmaps来管理JavaScript文件的加载,但碰到了一个特别费解的问题:部分JS文件会以名称带哈希后缀的副本形式被重复加载到服务器,我完全摸不清这是为什么,也不知道该怎么阻止这种情况。下面我用两个实际测试场景来详细描述问题:

场景1:出现重复JavaScript文件

我的importmap配置是这样的:

pin "application"
pin "@hotwired/turbo-rails", to: "turbo.min.js"
pin "@hotwired/stimulus", to: "stimulus.min.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
pin_all_from "app/javascript/controllers", under: "controllers"
pin "jquery", to: "https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"
pin "jquery-ui", to: "https://cdn.jsdelivr.net/npm/jquery-ui@1.14.1/dist/jquery-ui.min.js"
pin "confnosprdpicks", to: "confnosprdpicks.js"
pin "seasongameset_schedules", to: "seasongameset_schedules.js"
pin "survivorpicks", to: "survivorpicks.js"
pin "seasongameset_schedule_bets", to: "seasongameset_schedule_bets.js"
pin "gm_total_bets", to: "gm_total_bets.js"
pin "spread_bets", to: "spread_bets.js"
pin "spread_bet_teams_season_action", to: "spread_bet_teams_season_action.js"
pin "predictions", to: "predictions.js"
pin "super_bowl_bets", to: "super_bowl_bets.js"

启动Rails服务器并打开页面后,我发现加载的JS文件里出现了多组重复项:

  • css 和 css.js
  • datetimes 和 datetimes.js
  • seasongameset_schedules 和 seasongameset_schedules-d7d77...js
  • spread_bets.js 和 spread_bets-7bc8d...js
    而且每一组重复文件的内容是完全一致的。

场景2:无重复JavaScript文件

我只把importmap.rb里的最后一行注释掉,修改后的配置如下:

pin "application"
pin "@hotwired/turbo-rails", to: "turbo.min.js"
pin "@hotwired/stimulus", to: "stimulus.min.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
pin_all_from "app/javascript/controllers", under: "controllers"
pin "jquery", to: "https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"
pin "jquery-ui", to: "https://cdn.jsdelivr.net/npm/jquery-ui@1.14.1/dist/jquery-ui.min.js"
pin "confnosprdpicks", to: "confnosprdpicks.js"
pin "seasongameset_schedules", to: "seasongameset_schedules.js"
pin "survivorpicks", to: "survivorpicks.js"
pin "seasongameset_schedule_bets", to: "seasongameset_schedule_bets.js"
pin "gm_total_bets", to: "gm_total_bets.js"
pin "spread_bets", to: "spread_bets.js"
pin "spread_bet_teams_season_action", to: "spread_bet_teams_season_action.js"
pin "predictions", to: "predictions.js"
# pin "super_bowl_bets", to: "super_bowl_bets.js"

重启服务器后再打开同一个页面,加载的JS文件里就没有重复项了(唯一的两个application-nnn.js文件是分别来自app/javascript和app/javascript/controllers的不同文件,属于正常情况)。

我完全搞不懂为什么仅仅注释掉最后一个pin配置,就能让重复加载的问题消失,而第一个场景的重复情况完全不符合我的预期。有没有大佬能帮我分析下这背后的原因,或者给我一些解决这个问题的思路?提前谢谢大家了!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:14:33