После компиляции веб-упаковщик создает public/packs/manifest.json
с информацией о том, как точно называются файлы.
В контроллере вы можете получить информацию из манифеста и перенаправления:
# get 'widget', to: 'some_controller#widget'
def widget
path = helpers.current_webpacker_instance.manifest.lookup!('widget', type: :javascript) # => "/packs/js/widget-94e8fa5b2be40540f2fb.js"
redirect_to path
# also here you can calculate path and use send_data
end
Если вам все равно о кеш-очистке (или использовании другого метода), не хотите дополнительного перенаправления, хотите обслуживать виджет через веб-сервер, не нажимая rails et c., вы можете скопировать пакет после компиляции, определить задачу rake:
task 'copy_my_widget' => :environment do
manifest = JSON.parse(File.read(Rails.root.join('public/packs/manifest.json')))
pack_path = Rails.root.join('public', '.' + manifest['widget.js'])
FileUtils.cp(pack_path, Rails.root.join('public', 'widget.js'))
end
Rake::Task["webpacker:compile"].enhance do
Rake::Task["copy_my_widget"].invoke
end