Rails 6运行报Webpacker::Manifest::MissingEntryError错误如何解决?
解决方案步骤
1. 补全webpack依赖并重新初始化webpacker
出现error Command "webpack" not found是因为缺少webpack核心依赖和cli工具,先执行以下命令修复依赖问题:
- 先删除现有存在冲突的node依赖和锁文件:
rm -rf node_modules yarn.lock package-lock.json
- 执行webpacker官方初始化命令,会自动适配你项目中webpacker版本安装对应兼容的webpack相关依赖,比手动安装更准确:
rails webpacker:install
执行过程中如果提示覆盖配置文件,可先备份你修改过的配置后选择同意覆盖。
- 重新安装所有依赖:
yarn install bundle install
2. 验证webpacker基础配置
检查config/webpacker.yml文件,确认开发环境下的自动编译配置已开启:
development: <<: *default compile: true
开启后Rails会在开发环境自动编译webpack资源,不需要手动启动webpack服务。
3. 恢复JavaScript功能和删除确认提示
把之前从application.html.erb中删除的<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>代码恢复。
再检查app/javascript/packs/application.js文件,确认已经引入了rails-ujs和turbolinks:
import Rails from "@rails/ujs" import Turbolinks from "turbolinks" import * as ActiveStorage from "@rails/activestorage" import "channels" Rails.start() Turbolinks.start() ActiveStorage.start()
删除确认提示消失就是因为rails-ujs没有正常加载,这个库负责处理link_to的delete方法和确认弹窗逻辑,加载正常后不需要把link_to替换为button_to也可以正常触发删除和确认提示。
4. 验证修复效果
执行以下命令预编译资源,确认没有webpack相关报错:
rails assets:precompile
之后启动Rails服务,访问页面测试删除功能的确认弹窗是否正常弹出即可。
额外排查点
如果依然报错,检查Manjaro系统的nodejs和yarn版本是否符合webpacker 5的要求:
- nodejs版本需要 >= 12.x
- yarn版本需要 >= 1.22.x
可以通过node -v和yarn -v查看版本,版本过低的话用pacman包管理器更新即可。
内容的提问来源于stack exchange,提问作者wowvain
相关产品推荐
相关产品推荐

