升级Rails3至4.2.4后安装react-rails遇Webpacker配置文件缺失错误
首先咱们拆解下你遇到的核心问题,先看报错内容:
Webpacker configuration file not found /home/projects/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /home/projects/config/webpacker.yml /home/.rvm/gems/ruby-2.3.4/gems/webpacker-3.5.2/lib/webpacker/configuration.rb:73:in `rescue in load' /home/.rvm/gems/ruby-2.3.4/gems/webpac...
这个错误的根源是Webpacker和Rails 4.2.4不兼容:Webpacker是从Rails 5.1版本才正式集成到框架中的,Rails 4.2.x完全没有内置Webpacker的配置生成逻辑,所以你执行rake webpacker:install时,系统找不到配置文件是必然的。
而且新版本的react-rails默认依赖Webpacker,但对于Rails 4.2来说,我们完全可以用它的Asset Pipeline模式来集成React,不需要Webpacker。下面是具体的解决步骤:
步骤1:调整Gemfile,使用兼容Rails 4.2的react-rails版本
打开你的Gemfile,替换掉现有react-rails和webpacker的配置:
# 选用适配Rails 4.2的react-rails稳定版本 gem 'react-rails', '~> 2.6.0' # 如果之前添加了webpacker,直接移除这一行 # gem 'webpacker'
步骤2:重新安装依赖
在终端执行命令更新gem依赖:
bundle install
步骤3:用Asset Pipeline模式初始化react-rails
运行react-rails自带的初始化命令,它会自动把React相关资源整合到Rails的Asset Pipeline中:
rails generate react:install
这个命令会帮你完成这些操作:
- 将
react和react-dom的JS文件放入vendor/assets/javascripts/目录 - 在
app/assets/javascripts/application.js中自动添加//= require react和//= require react_ujs - 创建
app/assets/javascripts/components/目录,用于存放你的React组件
步骤4:验证安装是否成功
你可以生成一个测试组件来确认:
rails generate react:component HelloWorld greeting:string
然后在任意视图文件中调用这个组件:
<%= react_component 'HelloWorld', greeting: 'Hello from Rails 4.2!' %>
启动Rails服务器后访问对应页面,就能看到React组件正常渲染了。
如果你的项目确实需要用Webpack构建复杂的React应用,那需要手动配置Webpack与Rails 4.2的集成,但这个过程比较繁琐,对于大多数场景来说,Asset Pipeline模式已经足够满足需求。
内容的提问来源于stack exchange,提问作者vipin

