我不太确定实际行为是什么,所以我的第一个问题是:
来自 gem(在我的例子中 Spree)的资产(例如 javascript)是否总是被编译?我不使用 Spree 的 javascript,因此不希望编译它们。我不需要它们application.js
或任何其他 javascript 文件,但是
rake assets:precompile
尽管如此,还是编译了它们。我只是不想让它们躺在我的身边public/assets
folder.
所以我想我的问题是,有没有办法禁用从 gem 编译 javascript?
导轨 4.X
它在 Rails 4.X 上不起作用,一个可能的(肮脏的)解决方法是:
require 'sprockets/railtie'
Bundler.require(:default, Rails.env)
module Sprockets
module Paths
SKIP_GEMS = ["rails-assets-jquery", "rails-assets-bootstrap"]
def append_path_with_rails_assets(path)
append_path_without_rails_assets(path) unless SKIP_GEMS.any? { |gem| path.to_s.start_with?(Gem.loaded_specs[gem].full_gem_path) }
end
alias_method_chain :append_path, :rails_assets
end
end
Rails 5.X 更新
alias_method_chain
自 Rails 5.X 起已弃用。这是使用的更新版本prepend
,并覆盖Sprockets::Environment
模块而不是Sprockets::Paths
.
module SprocketsPathsOverride
SKIP_GEMS = ["rails-assets-jquery", "rails-assets-bootstrap"]
def append_path(path)
should_skip = SKIP_GEMS.any? do |gem|
path.to_s.start_with?(Gem.loaded_specs[gem].full_gem_path)
end
super(path) unless should_skip
end
end
Sprockets::Environment.prepend(SprocketsPathsOverride)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)