Rails 5.1迁移JS文件至app/javascript(Asset Pipeline转Webpack)遇报错
我刚帮几个朋友解决过类似的Webpack迁移问题,你的这个弃用警告本质是:Rails还在试图从Asset Pipeline(app/assets)里找disallow-char.js,但你已经把文件移到了Webpack管辖的app/javascript目录,同时删除了预编译配置,导致它只能回退到public文件夹找——而这个回退行为已经被弃用了。咱们一步步来修复:
第一步:确保Webpack能打包这个文件
打开app/javascript/packs/application.js(如果是jsbundling-rails则是app/javascript/application.js),把disallow-char.js导入进去:// 假设你的文件在app/javascript/utils/disallow-char.js import '../utils/disallow-char.js';要是这个文件需要作为单独入口(不需要和主包打包在一起),得在Webpack配置里添加对应的entry点:
// webpack.config.js 或对应配置文件 module.exports = { entry: { application: './app/javascript/packs/application.js', 'disallow-char': './app/javascript/packs/disallow-char.js' } };第二步:替换页面中的旧引用方式
找到页面/布局里引用这个JS的地方,把原来的Asset Pipeline标签:<%= javascript_include_tag 'disallow-char' %>替换成Webpack对应的标签(根据你用的Webpack方案):
- 若用Webpacker:
<%= javascript_pack_tag 'disallow-char' %> - 若用jsbundling-rails:
<%= javascript_tag 'disallow-char' %>(前提是打包后的文件在public/assets下)
- 若用Webpacker:
第三步:清理残留配置和缓存
- 再确认一遍
config/initializers/assets.rb里没有任何和disallow-char.js相关的预编译配置 - 清理Rails和Webpack的缓存:
rails assets:clobber # Webpacker用户额外执行 bundle exec webpacker:clean # jsbundling-rails用户额外执行 yarn build:clean
- 再确认一遍
第四步:验证打包结果
确保disallow-char.js确实在app/javascript目录下的正确位置,然后运行打包命令:# Webpacker bundle exec webpacker:compile # jsbundling-rails yarn build打包完成后,去
public/packs(或public/assets)目录下检查是否生成了对应的disallow-char.js(或带哈希的版本,比如disallow-char-abc123.js)
做完这些步骤后重启Rails服务器,那个弃用警告应该就消失了。
内容的提问来源于stack exchange,提问作者Sandip Subedi

