【问题标题】:Webpacker::Manifest::MissingEntryErrorWebpacker::Manifest::MissingEntryError [关闭]
【发布时间】:2019-03-09 09:43:33
【问题描述】:

我已经使用rails new 和--webpack=react 启动了一个rails 项目。

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

到目前为止,一切正常。在这一点上,我要做的就是做出反应来渲染默认的 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 在中找不到 hello_react.js G:/../../../myGroceryList/public/packs/manifest.json。可能的原因:

你想为你的 compile 设置 webpacker.yml 值为 true 环境,除非你使用 webpack -w 或 webpack 开发服务器。 webpack 尚未重新运行以反映更新。你 错误配置了 Webpacker 的 config/webpacker.yml 文件。你的 webpack 配置没有创建清单。您的清单包含:{ }

我已经推送了project up to GitHub. 任何关于出了什么问题以及如何解决这个错误的想法?

已解决:以 cmets 为单位的分辨率

【问题讨论】:

  • 这是一个你的项目,这里有一些小的变化希望,没问题:然后只需使用rails s 这是项目:github.com/nezirz/groceryList ![enter image description here](i.stack.imgur.com/TwNls.png) 如果站点未显示,还请检查控制台中是否还有其他错误。
  • 谢谢。我会看看它是否有效。
  • 解决方案:据我所知,当您的 public/packs 文件夹缺少 Manifest 文件或全部丢失时,会触发此错误。在我的情况下发生的事情是 Webpackers 编译步骤默默地失败并且没有创建 public/packs 文件夹。
  • 使用rake webpacker:install在新创建的rails项目中重新安装webpacker为我修复了它。
  • 这是我为未来 Rails 6.1+ 和 Ruby 2.7.1+ 用户提供的解决方案。对我来说,这是因为我的 webpacker gem 在Gemfile 中设置为 4.0。一旦我将它提升到 5.0 并运行 bundle update,这个错误就消失了。

标签: ruby-on-rails reactjs webpack


【解决方案1】:

Jonny B,

我遇到了同样的问题。我能够确定我需要将“.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 上点击应用程序,但反应应用程序无法正确呈现。 在 3000 上通过 Puma 服务器访问页面后,我现在可以看到已编译的资产在我的 Apache/Passenger 实例中运行。因此,按需编译似乎只有在以命令行 (rails s) 启动的服务器中运行时才能正常工作......无法正确呈现。 :-/

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

更新

在玩了很多之后,安装了不同版本的 NodeJS、Ruby、rbenv、nvm 等,我能够确定 NODE_ENV 不是为 Apache 设置的/乘客环境。使用 Rbenv,我能够在我的应用根目录中添加一个 .rbenv-vars 文件,其中包含:

NODE_ENV=development
RACK_ENV=development
RAILS_ENV=development

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

【讨论】:

  • 将 .jsx 添加到 webpacker.yml 为我解决了这个问题。
【解决方案2】:

解决方案:据我所知,当您的 public/packs 文件夹缺少 Manifest 文件或全部丢失时,会触发此错误。在我的案例中发生的事情是 Webpackers 编译步骤默默地失败并且没有创建 public/packs 文件夹。我为此检查了 webpacker gem 的修复程序。你可以看到修复和对话here。

如果这是根本原因,那么您可以根据您喜欢如何安装节点包来修复其中任何一个 yarn install 要么 npm install

【讨论】:

  • 这是我为未来 Rails 6.1+ 和 Ruby 2.7.1+ 用户提供的解决方案。对我来说,这是因为我的 webpacker gem 在Gemfile 中设置为 4.0。一旦我将它提升到 5.0 并运行 bundle update,这个错误就消失了。我猜它在我的应用程序上静默失败并且没有创建文件夹,因为我指定了错误的版本号。
  • 从 Webpacker 的下一个版本开始,我很高兴地报告,对这个 SO 答案所做的贡献有助于改进错误消息本身! github.com/rails/webpacker/pull/3232
  • 太棒了。我很高兴这一切都做出了贡献。
猜你喜欢
  • 2021-07-13
  • 2019-06-04
  • 2020-03-11
  • 2018-08-10
  • 1970-01-01
  • 2018-04-05
  • 2021-02-27
  • 2022-01-03
相关资源
最近更新 更多