Description
Problem is that webpacker enhances rake assets:precompile
to build the assets first, then builds the packs.
This doesn't work as Hyperstack references the packs from the application.js (via the hyperstack-loader.js
file.) So the application.js file will not reference the packs.
The solution is to build the packs first, by adding the following lines the Rakefile in the application root directory:
puts "Warning: Hyperstack is running yarn install and webpacker:compile BEFORE assets:precompile"
# determine if we should use built in yarn:install or use webpacker:yarn_install
yarn_installer = (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 0) ? 'webpacker:yarn_install' : 'yarn:install'
# install yarn and compile packs BEFORE assets:precompile
Rake::Task["assets:precompile"].enhance([yarn_installer, 'webpacker:compile'])
Note: If you are patching an existing system, and you are already on Rails 5.1 or newer you can simplify the above to a single line:
Rake::Task["assets:precompile"].enhance(['yarn:install', 'webpacker:compile'])
The above should be added to the hyperstack-rails configuration script (if webpack is being installed.)
Because there might be unknown side effects to this, this should be done as a patch (i.e. like the above) rather than sticking it a rake file in the hyperstack-rails lib directory for example.
rails/webpacker#2237 has been raised on the rails webpacker gem. Hopefully the Rails team can accept this reversal in ordering, in which case the whole problem goes away.