It’s designed to work with Rails 5.1+ and makes use of the Yarn dependency management
that’s been made default from that version forward. You can either make use of Webpacker
during setup of a new application with
--webpack or you can add the gem and run
bin/rails webpacker:install in an existing application.
Webpacker ships with two binstubs: ./bin/webpack and ./bin/webpack-watcher. They’re both thin wrappers around the standard webpack.js executable, just to ensure that the right configuration file is loaded and the node_modules from vendor are used.
In development, you’ll need to run
./bin/webpack-watcher in a separate terminal from
If you’d rather not have to run the two processes separately by hand, you can use
Webpacker gives you a default set of configuration files for development and production. They all live together with the shared points in config/webpack/*.js. By default, you shouldn’t have to make any changes for a basic setup out the box. But this is where you do go if you need something more advanced.
Let’s say you’re building a calendar. Your structure could look like this:
To compile all the packs during deployment, you can use the
rails webpacker:compile command. This
will invoke the production configuration, which includes digesting. The
method will automatically insert the correct digest when run in production mode. Just like the asset
pipeline does it.
Ready for React
To use Webpacker with React, just create a new app with
rails new myapp --webpack=react (or run
rails webpacker:install:react on a Rails 5.1 app already setup with webpack), and all the relevant dependencies
will be added via yarn and changes to the configuration files made. Now you can create JSX files and
have them properly compiled automatically.
Work left to do
- Make asset pipeline digests readable from webpack, so you can reference images etc
- Consider chunking setup
- Consider switching to Webpack 2.0
- Consider on-demand compiling with digests when digesting=true
- I’m sure a ton of other shit
Webpacker is released under the MIT License.