mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 08:57:10 -06:00
DEV: Update to Sprockets 4.0 (#16459)
The main difference is that Sprockets 4.0 no longer tries to compile everything by default. This is good for us, because we can remove all our custom 'exclusion' logic which was working around the old sprockets 3.0 behavior. The other big change is that lambdas can no longer be added to the `config.assets.precompile` array. Instead, we can do the necessary globs ourselves, and add the desired files manually. A small patch is required to make ember-rails compatible. Since we plan to remove this dependency in the near future, I do not intend to upstream this change. I have compared the `bin/rake assets:precompile` output before and after this change, and verified that all files are present.
This commit is contained in:
parent
6fc52d95de
commit
ec7efbde1a
4
Gemfile
4
Gemfile
@ -31,9 +31,7 @@ end
|
||||
|
||||
gem 'json'
|
||||
|
||||
# TODO: At the moment Discourse does not work with Sprockets 4, we would need to correct internals
|
||||
# This is a desired upgrade we should get to.
|
||||
gem 'sprockets', '3.7.2'
|
||||
gem 'sprockets'
|
||||
|
||||
# this will eventually be added to rails,
|
||||
# allows us to precompile all our templates in the unicorn master
|
||||
|
@ -443,7 +443,7 @@ GEM
|
||||
simplecov_json_formatter (~> 0.1)
|
||||
simplecov-html (0.12.3)
|
||||
simplecov_json_formatter (0.1.4)
|
||||
sprockets (3.7.2)
|
||||
sprockets (4.0.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (3.4.2)
|
||||
@ -602,7 +602,7 @@ DEPENDENCIES
|
||||
shoulda-matchers
|
||||
sidekiq
|
||||
simplecov
|
||||
sprockets (= 3.7.2)
|
||||
sprockets
|
||||
sprockets-rails
|
||||
sshkey
|
||||
stackprof
|
||||
|
1
app/assets/config/manifest.js
Normal file
1
app/assets/config/manifest.js
Normal file
@ -0,0 +1 @@
|
||||
//= link_tree ../images
|
@ -142,9 +142,9 @@ module Discourse
|
||||
config.assets.skip_minification = []
|
||||
|
||||
# explicitly precompile any images in plugins ( /assets/images ) path
|
||||
config.assets.precompile += [lambda do |filename, path|
|
||||
path =~ /assets\/images/ && !%w(.js .css).include?(File.extname(filename))
|
||||
end]
|
||||
Dir.glob("#{config.root}/plugins/*/assets/images/**/*").each do |filename|
|
||||
config.assets.precompile << filename if !%w(.js .css).include?(File.extname(filename))
|
||||
end
|
||||
|
||||
config.assets.precompile += %w{
|
||||
vendor.js
|
||||
@ -193,25 +193,6 @@ module Discourse
|
||||
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
|
||||
initializer :fix_sprockets_loose_file_searcher, after: :set_default_precompile do |app|
|
||||
app.config.assets.precompile.delete(Sprockets::Railtie::LOOSE_APP_ASSETS)
|
||||
|
||||
# We don't want application from node_modules, only from the root
|
||||
app.config.assets.precompile.delete(/(?:\/|\\|\A)application\.(css|js)$/)
|
||||
app.config.assets.precompile += ['application.js']
|
||||
|
||||
start_path = ::Rails.root.join("app/assets").to_s
|
||||
exclude = ['.es6', '.hbs', '.hbr', '.js', '.css', '.lock', '.json', '.log', '.html', '']
|
||||
app.config.assets.precompile << lambda do |logical_path, filename|
|
||||
filename.start_with?(start_path) &&
|
||||
!filename.include?("/node_modules/") &&
|
||||
!filename.include?("/dist/") &&
|
||||
!exclude.include?(File.extname(logical_path))
|
||||
end
|
||||
end
|
||||
|
||||
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||
config.time_zone = 'UTC'
|
||||
@ -290,6 +271,11 @@ module Discourse
|
||||
Sprockets.register_mime_type 'application/javascript', extensions: ['.js', '.es6', '.js.es6'], charset: :unicode
|
||||
Sprockets.register_postprocessor 'application/javascript', DiscourseJsProcessor
|
||||
|
||||
# This class doesn't exist in Sprockets 4, but ember-rails tries to 'autoload' it
|
||||
# Define an empty class to prevent an error
|
||||
class Sprockets::Engines
|
||||
end
|
||||
|
||||
require 'discourse_redis'
|
||||
require 'logster/redis_store'
|
||||
# Use redis for our cache
|
||||
|
12
lib/freedom_patches/ember_sprockets_4.rb
Normal file
12
lib/freedom_patches/ember_sprockets_4.rb
Normal file
@ -0,0 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# One of the initializers in `discourse-ember-rails/lib/ember_rails.rb` tries to set
|
||||
# the ember template compiler path based on a call to `Sprockets::Environment#resolve`
|
||||
# which started returning an array in Sprockets 4.
|
||||
# This doesn't seem to be needed - it was setting to the existing value, so we can just ignore it.
|
||||
Ember::Handlebars::Template.singleton_class.prepend(Module.new do
|
||||
def setup_ember_template_compiler(path)
|
||||
return if path.is_a? Array
|
||||
super
|
||||
end
|
||||
end)
|
Loading…
Reference in New Issue
Block a user