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

Rails 5.1迁移JS文件至app/javascript(Asset Pipeline转Webpack)遇报错

解决Rails从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下)
  • 第三步:清理残留配置和缓存

    1. 再确认一遍config/initializers/assets.rb里没有任何和disallow-char.js相关的预编译配置
    2. 清理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:09