Если я использую //=require_tree .
в application.css, есть ли способ исключить определенные файлы, кроме обращения к //=require_directory
и организации дерева?
Возможно, что-то вроде //= require_tree ., {except: 'something'}
Если я использую //=require_tree .
в application.css, есть ли способ исключить определенные файлы, кроме обращения к //=require_directory
и организации дерева?
Возможно, что-то вроде //= require_tree ., {except: 'something'}
Это возможно с помощью новой директивы stub
Sprocket, которая доступна в Sprockets v2.2.0 и выше. Однако Rails 3.2 будет использовать только Sprockets v2.1.3, который не имеет этой функции. На данный момент текущие Edge Rails имеют директиву stub
, и она официально будет в Rails 4.0 и выше.
Использование:
//= require jquery
//= require_tree .
//= stub unwanted_js
Директивы stub
не могут быть переопределены следующими директивами require
или include
.
Если вы хотите использовать директиву stub
в своем проекте Rails 3.2, вам придется переключиться на Edge Rails или разветкить ваш Rails-камень со своей зависимостью Sprockets, измененной до версии 2.2.0.
Начиная с выпуска рельсов 3.2.9, он поддерживает блокировку звездочек до версии 2.2.x, чтобы мы могли использовать директиву //= stub
, которую имеют последние звездочки.
//= stub unwanted_js
http://weblog.rubyonrails.org/2012/11/12/ann-rails-3-2-9-has-been-released/
Итак, чтобы использовать его, просто обновите до Rails 3.2.9
Примечание. Этот ответ теперь устарел, с обновлением для Sprockets, имеющим эту функцию. См. Ответ ниже.
===
Это невозможно с текущими директивами Sprockets, но это кажется удобной функцией.
Другой способ вручную перечислить каждый желаемый файл.
Возможно, вы могли бы записать это как запрос функции на Sprockets repo?: -)
Следующий патч обезьяны решает это для меня:
module Sprockets
class DirectiveProcessor
# support for: require_tree . exclude: "", "some_other"
def process_require_tree_directive(path = ".", *args)
if relative?(path)
root = pathname.dirname.join(path).expand_path
unless (stats = stat(root)) && stats.directory?
raise ArgumentError, "require_tree argument must be a directory"
end
exclude = args.shift == 'exclude:' ? args.map {|arg| arg.sub(/,$/, '')} : []
context.depend_on(root)
each_entry(root) do |pathname|
if pathname.to_s == self.file or exclude.include?(pathname.basename(pathname.extname).to_s)
next
elsif stat(pathname).directory?
context.depend_on(pathname)
elsif context.asset_requirable?(pathname)
context.require_asset(pathname)
end
end
else
# The path must be relative and start with a `./`.
raise ArgumentError, "require_tree argument must be a relative path"
end
end
end
end
Попробуйте лучше https://github.com/QubitProducts/miniMerge
Он поддерживает не только JS, но и совместим с базовыми режимами.
Вы можете исключить не только уровни файлов, но и блокировать или даже строки.
Полное управление depenedncies с несколькими исходными базами.
Я использовал звездочки в прошлом, и это лучше, я использую его также для CSS.