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

Ruby on Rails中如何通过Asset Pipeline正确引入自定义JS文件?

Rails中引入init.js到所有视图的正确方法

你的问题出在Rails 6+默认使用JS Bundling(如esbuild、Webpack)处理JavaScript,而非传统Sprockets的Asset Pipeline指令逻辑,//= require init这种Sprockets语法在ES模块格式的application.js里不会生效。

解决步骤:

  1. 修改application.js的引入方式
    把原来的//= require init替换为ES模块的import语句,因为application.js是JS bundler的入口文件,所有导入的模块都会被打包到最终的application.js bundle中:

    import "@hotwired/turbo-rails"
    import "controllers"
    import "./init" // 替换原来的//= require init
    

    这里./init是相对路径,对应app/javascript/init.js文件,确保路径匹配即可。

  2. 理解打包后的文件表现
    用这种方式打包后,init.js的代码会被合并到application.js中,所以浏览器Sources标签里不会看到单独的init.js文件(开发环境下可通过source map找到对应代码,默认已开启source map)。这才是Asset Pipeline(当前JS Bundling)的正确工作模式——合并压缩资源。

  3. 验证配置正确性
    你的app/assets/config/manifest.js配置没问题,它确保Sprockets能定位到JS资源,但核心的JS打包逻辑由bundler处理,所以重点是application.js里的import语句。

  4. 重启开发服务器
    修改完成后重启Rails服务器,刷新页面即可生效。

内容的提问来源于stack exchange,提问作者mozhayka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:10