Rails 7:如何不使用importmap加载普通JavaScript函数文件?
Rails 7 加载普通全局JS文件(跳过Importmap)
按照以下步骤配置,就能通过Assets Pipeline生成你需要的普通<script>标签,让全局JS函数正常可用:
1. 放置你的JS文件
把包含全局函数的JS文件放到app/assets/javascripts/custom/index.js,内容如下:
function btn_project_show() { alert('culodemono'); }
2. 配置Assets预编译规则
修改config/initializers/assets.rb,添加你的JS文件到预编译列表:
Rails.application.config.assets.precompile += %w( custom/index.js )
3. 替换布局中的JS标签
打开你的布局文件(比如app/views/layouts/application.html.erb),移除<%= javascript_importmap_tags %>,替换成:
<%= javascript_include_tag 'custom/index', defer: false %>
注:如果你的函数是在DOM加载后调用(比如绑定到元素点击事件),可以保留
defer: true;如果是直接内联调用(比如<button onclick="btn_project_show()">),则需要设置defer: false确保函数提前加载。
4. 预编译资产(生产环境必备)
运行以下命令预编译资产,生成带哈希值的文件:
rails assets:precompile
完成以上步骤后,页面源码会出现类似你需要的标签:
<script src="/assets/custom/index-fd29fe543537735de09c23dfa7241cdd8e47c8f9fd71e89211b591fc7c12fd8c.js"></script>
此时直接调用btn_project_show()就能正常执行,不会出现函数找不到的问题。
内容的提问来源于stack exchange,提问作者icalvete
相关产品推荐
相关产品推荐

