Rails 6中能否使用.js.erb文件?ERB代码未被解析如何处理
Rails 6 .js.erb文件不生效问题解答
Rails 6完全支持使用.js.erb格式的文件,你的代码写法本身没有问题,ERB不执行是文件存放路径和处理链路配置的问题。
不生效的核心原因
Rails 6默认使用Webpacker作为JS打包工具,你存放文件的app/javascripts/(Rails 6默认对应路径为app/javascript/)目录默认归Webpacker管理,默认配置下Webpacker不会解析ERB语法,只有Sprockets(Rails传统静态资源处理工具)会默认处理ERB语法的静态资源文件。
两种可用解决方案
你可以根据自己的技术栈选择任意一种方式处理:
方案1:走Sprockets处理链路
把你的test.js.erb文件移动到app/assets/javascripts/custom/目录下,这个目录默认归Sprockets管理,会自动解析ERB语法。
之后需要做两个配置:- 在
config/initializers/assets.rb中添加预编译规则:
Rails.application.config.assets.precompile += %w( custom/test.js )- 在需要引入该JS的页面或者全局布局文件中,通过以下标签引入:
<%= javascript_include_tag 'custom/test' %>- 在
方案2:给Webpacker添加ERB解析能力
如果你希望继续把JS文件放在Webpacker管理的app/javascript/目录下,可以手动配置ERB解析loader:- 执行命令安装loader:
yarn add rails-erb-loader- 打开
config/webpack/environment.js,添加如下配置:
const erb = require('rails-erb-loader') environment.loaders.prepend('erb', erb)配置完成后重启服务,你现有路径下的
test.js.erb里的ERB代码就可以正常解析执行了。
额外注意
如果你是要写响应Ajax请求的动态JS视图,不需要走上面两种配置,直接把对应的.js.erb文件放在app/views/对应控制器的视图目录下即可,Rails会自动解析渲染返回给前端。
内容的提问来源于stack exchange,提问作者B Seven
相关产品推荐
相关产品推荐

