Using webpack with app upgraded from Rails 6 to Rails 7

I am in the process of upgrading my company’s Rails 6 app to Rails 7 and I’ve run into a webpack issue when attempting to deploy this app to Heroku.

This app is using webpacker for JavaScript. During rake assets:precompile, webpack is being run as documented here. When this app is deployed to Heroku as a Rails 6 app, this “just works”. Specifically, when looking at the Heroku build log for the deployment, I see yarn install as part of rake assets:precompile. This allows webpack to work.

After upgrading to Rails 7, something has changed with regards to being able to run the webpack command during rake assets:precompile because during the Heroku deployment, I am now seeing this and I am not seeing yarn install being run:

-----> Installing node-v16.13.1-linux-x64
-----> Installing yarn-v1.22.17
-----> Detecting rake tasks
-----> Preparing app for Rails asset pipeline
<lots of output>
       Compiling...
       Compilation failed:
       yarn run v1.22.17
       info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
       
       
       error Command "webpack" not found.
       
 !
 !     Precompiling assets failed.

I suspect that changes made in Rails with regards to the defaults used for JavaScript have somehow contributed to this.

I ran into an identical issue during my CI on GitHub and I was able to work around this by adding a yarn install step just before the rake assets:precompile but this seems like a hack to me.

There is probably a “Rails 7” way to fix this such that the webpack command is available prior to running rake assets:precompile.

Any/all suggestions are welcome!

After quite a bit of research online, I decided to switch from webpack to esbuild. The links below were particularly helpful with getting everything working.

After doing the switch, my deployment to Heroku is now working and the app is running as expected.