discourse/config/initializers/assets.rb
David Taylor c124c69833
DEV: Simplify sprockets configuration (#24111)
- Remove the wildcard crawler. This was already excluding almost all file types, but the exclude list was missing '.gjs' which meant those files were unnecessarily being hoisted into the `public/` directory during precompile

- Automatically include all ember-cli-generated assets without needing them to be listed. The main motivation for this change is to allow us to start using async imports via Embroider/Webpack. The filenames for those new async bundles will not be known in advance.

- Skips sprockets fingerprinting on Embroider/Webpack chunk JS files. Their filenames already include a fingerprint, and having sprockets change the filenames will cause problems for the async import feature (where filenames are included deep inside js bundles)

This commit also updates our ember-cli build so that it skips building plugin tests in the production environment. This should provide a slight build speed improvement.
2023-10-26 17:29:53 +01:00

65 lines
2.1 KiB
Ruby

# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Enable the asset pipeline
Rails.application.config.assets.enabled = true
# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = "2"
# Add additional assets to the asset load path.
Rails.application.config.assets.paths << "#{Rails.root}/config/locales"
Rails.application.config.assets.paths << "#{Rails.root}/public/javascripts"
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in the app/assets
# folder are already added.
# explicitly precompile any images in plugins ( /assets/images ) path
Rails.application.config.assets.precompile += [
lambda do |filename, path|
path =~ %r{assets/images} && !%w[.js .css].include?(File.extname(filename))
end,
]
Rails.application.config.assets.precompile += %w[
break_string.js
service-worker.js
locales/i18n.js
discourse/app/lib/webauthn.js
confirm-new-email/confirm-new-email.js
confirm-new-email/bootstrap.js
scripts/discourse-test-listen-boot
]
Rails.application.config.assets.precompile << lambda do |logical_path, filename|
filename.start_with?(EmberCli.dist_dir) && EmberCli.assets.include?(logical_path)
end
# Precompile all available locales
unless GlobalSetting.try(:omit_base_locales)
Dir
.glob("#{Rails.root}/app/assets/javascripts/locales/*.js.erb")
.each do |file|
Rails
.application
.config
.assets
.precompile << "locales/#{file.match(/([a-z_A-Z]+\.js)\.erb$/)[1]}"
end
end
# out of the box sprockets 3 grabs loose files that are hanging in assets,
# the exclusion list does not include hbs so you double compile all this stuff
Rails.application.config.assets.precompile.delete(Sprockets::Railtie::LOOSE_APP_ASSETS)
# We don't want application from node_modules, only from the root
Rails.application.config.assets.precompile.delete(%r{(?:/|\\|\A)application\.(css|js)$})
Discourse
.find_plugin_js_assets(include_disabled: true)
.each do |file|
Rails.application.config.assets.precompile << "#{file}.js" if file.end_with?("_extra")
end