Webpacker::Manifest::MissingEntryError

IT技术 ruby-on-rails reactjs webpack
2021-05-22 18:56:52

我已经开始了一个使用rails newwith的 rails 项目--webpack=react

我在database.yml 中生成了一个新的控制器来更新我的PostgreSQL 密码。

到目前为止,一切正常。在这一点上,我想要做的就是让 react 呈现默认的 hello_react.jsx 文件,该文件是由 rails 作为示例生成的。

当我放入<%= javascript_pack_tag 'hello_react' %>视图并运行服务器时,出现以下错误:

Webpacker::Manifest::MissingEntryError in Home#index 显示 G:/../../../myGroceryList/app/views/home/index.html.erb 其中第 1 行出现:

Webpacker 在 G:/../../../myGroceryList/public/packs/manifest.json 中找不到 hello_react.js。可能的原因:

除非您使用 webpack -w 或 webpack-dev-server,否则您希望为您的环境将 compile 的 webpacker.yml 值设置为 true。webpack 尚未重新运行以反映更新。您错误地配置了 Webpacker 的 config/webpacker.yml 文件。您的 webpack 配置未创建清单。您的清单包含:{ }

我已将该项目送到 GitHub。关于出了什么问题以及如何解决此错误的任何想法?

已解决:评论中的解决方案

2个回答

强尼乙

我遇到了同样的问题。我能够确定我需要将“.jsx”添加到我的webpacker.yml.

   extensions:
     - .js
+    - .jsx
     - .sass
     - .scss
     - .css

我还发现它webpacker:compile没有在页面刷新或文件更改时运行。我需要在每次更改后手动运行bundle exec rake assets:precompile(或bundle exec rake webpacker:compile)才能重新加载并查看更改。

我通过 Apache+Mod_Passenger 运行应用程序而不是使用rails s(我有太多的应用程序在同时开发,无法在命令行上继续启动和停止服务器)。这似乎不适用于 Webpacker 的按需编译功能。启动服务器rails s将允许我点击应用程序localhost:3000,但react应用程序无法正确呈现。3000 上通过 Puma 服务器点击页面,我现在可以看到编译的资产在我的 Apache/Passenger 实例中工作。因此,按需编译似乎只有在通过命令行 ( rails s)启动的服务器中运行时才能正常工作......这不能正确呈现。:-/

另一种选择(比运行 2 个服务器更好)是使用bundle exec rake assets:precompilebundle exec rake webpacker:compile进行更改时在命令行上进行编译仍然是 PITA,但至少它有效......现在。如果我找到更好的解决方案,我会更新答案。

更新

经过大量尝试,安装不同版本的 NodeJS、Ruby、rbenv、nvm 等,我能够确定NODE_ENV没有为 Apache/Passenger 环境设置。使用 Rbenv,我能够.rbenv-vars在我的应用程序根目录中添加一个文件,其中包含:

NODE_ENV=development
RACK_ENV=development
RAILS_ENV=development

现在,Webpacker(和 NodeJS)看到我正在开发而不是生产中运行,并且按需编译正在运行。

解决方案:当您的 public/packs 文件夹缺少 Manifest 文件或全部丢失时,我可以尽最大努力告诉您会触发此错误。在我的情况下发生的事情是 Webpackers 编译步骤无声地失败并且没有创建 public/packs 文件夹。为此,我检查了 webpacker gem 的修复程序。您可以在此处查看修复和对话

如果这是根本原因,那么您可以根据您喜欢如何安装节点包 yarn installnpm install