Webpacker 无法找到应用程序

47
我正在按照 "Getting Started with Rails" 创建一个新的 Rails 应用程序。在第 4.1 步中,该应用程序可以正常启动。但是,当我创建我的第一个控制器时,出现了一个 Webpack 错误。
我对 Webpack 不熟悉,我已经阅读了所有文档,但我不知道哪里出了问题或者缺失了什么...
  • Windows 10 1903
  • ruby 2.6
  • rails 6.0.0
  • nodeJS 12.11.0

rails webpacker:install
   identical  config/webpacker.yml
Copying webpack core config
       exist  config/webpack
   identical  config/webpack/development.js
   identical  config/webpack/environment.js
   identical  config/webpack/production.js
   identical  config/webpack/test.js
Copying postcss.config.js to app root directory
   identical  postcss.config.js
Copying babel.config.js to app root directory
   identical  babel.config.js
Copying .browserslistrc to app root directory
   identical  .browserslistrc
The JavaScript app source directory already exists
       apply  C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/webpacker-4.0.7/lib/install/binstubs.rb
  Copying binstubs
       exist    bin
   identical    bin/webpack
   identical    bin/webpack-dev-server
      append  .gitignore
Installing all JavaScript dependencies [4.0.7]
         run  yarn add @rails/webpacker from "."
yarn add v1.17.3
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.9: The platform "win32" is incompatible with this module.
info "fsevents@1.2.9" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > webpack-dev-server@3.8.2" has unmet peer dependency "webpack@^4.0.0".
warning "webpack-dev-server > webpack-dev-middleware@3.7.2" has unmet peer dependency "webpack@^4.0.0".
[4/4] Building fresh packages...
success Saved 1 new dependency.
info Direct dependencies
└─ @rails/webpacker@4.0.7
info All dependencies
└─ @rails/webpacker@4.0.7
Done in 4.48s.
Installing dev server for live reloading
         run  yarn add --dev webpack-dev-server from "."
yarn add v1.17.3
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.9: The platform "win32" is incompatible with this module.
info "fsevents@1.2.9" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning "webpack-dev-server > webpack-dev-middleware@3.7.2" has unmet peer dependency "webpack@^4.0.0".
warning " > webpack-dev-server@3.8.2" has unmet peer dependency "webpack@^4.0.0".
[4/4] Building fresh packages...
success Saved 1 new dependency.
info Direct dependencies
└─ webpack-dev-server@3.8.2
info All dependencies
└─ webpack-dev-server@3.8.2
Done in 4.92s.
Webpacker successfully installed �

Webpacker::Manifest::MissingEntryError in Welcome#index

Showing C:/Users/[...]/site_test/app/views/layouts/application.html.erb where line #9 raised:

Webpacker can't find application in C:/Users/[...]/site_test/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}

Extracted source (around line #9):

7
8      <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
9      <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
10 </head>
11 <body>
12

通过使用 nvm 将节点版本降级有所帮助,我从 20 降级到了 16,现在清单正常工作。 - vidur punj
22个回答

51

运行该命令

rails webpacker:install

这对我解决了问题。


在我更新了Gemfile到rails 6.1.4.1并运行了上述命令后,错误消失了。 - Dmitry
1
这对我来说没有创建任何manifest.json文件。 - stevec

40

这个错误似乎是关键。

Your manifest contains:
{
}

尝试在您的项目目录中简单运行yarn命令。这应该会创建一个manifest.json文件,以及其他内容。

如果不起作用,我在GitHub上找到了此问题,从中我原样复述以下可能会帮助您的命令。这将重置所有构建的资源和node_modules。

rm -rf node_modules
rails assets:clobber
yarn
rails assets:precompile

查看链接以获取更多信息。


2
bundle exec rails webpacker:clobber 会从项目中删除 public/packs 文件夹,其中包含 public/packs/manifest.json 文件,使用 yarn 可以将其恢复。对于遇到相同问题的人来说,最好使用 clean-webpack-plugin - Karol Karol
经过尝试430,123种不同的解决方案,这最终对我起作用了。谢谢! - zarathustra

16

就像Salman上面的回答一样,命令为

$ rails webpacker:install
或者
$ bundle exec rails webpacker:install

解决了这个问题。这对我来说非常奇怪,因为Rails并没有自动安装Webpacker,但在默认布局中仍然包含了javascript_pack_tag。不过,如果yarn抱怨你的Node版本有问题,请确保安装正确的版本并切换到它,然后再次运行上面的命令。这个简单的事情让我花了一个小时才解决。例如:

$ nvm install 13.7
$ nvm use 13.7
$ rails webpacker:install

你救了我的命。谢谢!我想yarn install命令也是必需的,我记不清了。 - Juan Camilo Camacho Beltrán
非常好的答案 - 这对我有用!一个小区别是我进入了Node.js主页,看到了最新版本,并从那里安装了它。然后我运行了 rails webpacker:install,然后一切都正常工作了。 - nope2023

10

我遇到了这个错误比我想象的时间更长,直到我执行了以下步骤:

首先,在我的Gemfile文件中,默认情况下webpacker被锁定在4.0版本上,我将其升级到5.0并运行了bundle update命令。

然后:

rm -rf node_modules
rails assets:clobber
yarn
rails assets:precompile

预编译资产时出现了一个新错误:

yarn install v1.22.4
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.36s.
I, [2021-04-09T11:04:33.781374 #16062]  INFO -- : Writing /app/public/assets/manifest-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.js
I, [2021-04-09T11:04:33.781915 #16062]  INFO -- : Writing /app/public/assets/manifest-04024382391bb910584145d8113cf35ef376b55d125bb4516cebeb14ce788597.js.gz
Compiling...
Compilation failed:
[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.

所以我编辑了config/webpack/environment.js文件,使其如下:

const { environment } = require('@rails/webpacker')

const customConfig = {
  resolve: {
    fallback: {
      dgram: false,
      fs: false,
      net: false,
      tls: false,
      child_process: false
    }
  }
};

environment.config.delete('node.dgram')
environment.config.delete('node.fs')
environment.config.delete('node.net')
environment.config.delete('node.tls')
environment.config.delete('node.child_process')

environment.config.merge(customConfig);

module.exports = environment

只有这样,javascript_load_tag标签才能加载。它可能并不适用于每个人,但希望能为其他处于相同情况的人节省时间。


6

这是我为未来的Rails 6.1+和Ruby 2.7.1+用户提供的解决方案。

对于我来说,这是因为我的webpacker gem在中设置为4.0版本。一旦我将其升级到5.0版本并运行之后,这个错误就解决了。看起来当webpacker运行时可能会静默失败,并且从未创建文件夹。将我的更改为Webpacker的最新版本为我解决了这个错误。

Gemfile变更

DELETED gem 'webpacker',    '~> 4.0.7'
ADDED   gem 'webpacker',    '~> 5.0'

这个对我来说在2021年6月有效。Rails 6.0.3。 - damuz91

6

运行yarn add @rails/webpacker命令,然后执行rails webpacker:install命令,解决了我的问题。


4

我在一个Rails 5.2应用程序中按照其README中的说明添加了Webpacker后,遇到了这个错误消息。

尝试了其他方法后,我尝试启动webpack-dev-server(即使不应该),只是想看看是否会显示更有帮助的错误信息。结果确实如此:

$ ./bin/webpack-dev-server
warning package.json: No license field
Another program is running on port 3035. Set a new port in  for dev_server

然后我转到了另一个正在运行的项目,它也使用Webpacker,并关闭了其中的webpack-dev-server(只是Ctrl + C:结束了正在运行的服务器)。现在,在这个新项目中重新加载页面时,我不再收到错误。即使我没有手动运行webpack-dev-server。

你可以在config/webpacker.yml文件的dev_server:部分更改此端口。如果需要,在config/initializers/content_security_policy.rb文件中也要更新它。


2

我不知道是否已经晚了,但是我花费了很长时间来解决这个问题,在无数小时的研究后,唯一的解决方案是注释第9行即JavaScript标签,这样可以让你的代码编译,但你将无法运行应用程序中使用JavaScript的方法,这将使你回到原点。要解决这个问题,请转到

"C:/Users/[...]/site_test/public"

请查找一个名为packs的文件夹。如果该文件夹不存在,则可能是问题所在。

每当您的应用程序运行时,它会编译并查找与application.html.erb文件相关联的所有可用文件,因此您有一个样式表链接标记(application.css)和一个javascript链接标记(application.js),错误是由于缺少application.js引起的。

解决方案:要解决此问题,请在(“C:/Users/[...]/site_test/public/”)中创建一个名为packs的文件夹,然后在公共文件夹中创建一个manifest.json文件。

your-app-name/public/packs/manifest.json

在完成以上步骤后,将以下代码添加到您的manifest.json文件中。
{
  "application.js": "/packs/js/application-e421b4aa3f716bebdab1.js",
  "application.js.map": "/packs/js/application-e421b4aa3f716bebdab1.js.map",
  "entrypoints": {
    "application": {
      "js": [
        "/packs/js/application-e421b4aa3f716bebdab1.js"
      ],
      "js.map": [
        "/packs/js/application-e421b4aa3f716bebdab1.js.map"
      ]
    }
  }
}

希望这样就可以了。

2
我遇到了同样的错误 - 对我来说解决方法是:我的.zshrc文件中设置了一个NODE_ENV环境变量,导致Webpack构建使用错误的环境配置,取消该环境变量后问题得以解决(unset NODE_ENV)。

我的.zshrc中没有那个变量,但我仍然遇到了这个问题。 - Mark Boulder
变量可能在其他地方被设置了 - 尝试运行 unset NODE_ENV 确保它没有被设置 - 澄清答案。 - Tyler Schroeder

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接