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.jsdatetimes和datetimes.jsseasongameset_schedules和seasongameset_schedules-d7d77...jsspread_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
相关产品推荐
相关产品推荐

