Application.cssで//=require_tree .
を使用している場合、//=require_directory
とツリー編成に頼る以外に特定のファイルを除外する方法はありますか?
おそらく//= require_tree ., {except: 'something'}
のようなもの
これは、Sprockets v2.2.0以降で使用可能なSprocketの新しいstub
ディレクティブで可能です。ただし、Rails 3.2は、この機能を持たないSprockets v2.1.3のみを使用します。現在のところ、現在のEdge Railsにはstub
ディレクティブを追加すると、正式にRails 4.0以降になります)。
使用法:
//= require jquery
//= require_tree .
//= stub unwanted_js
stub
ディレクティブは、後続のrequire
またはinclude
ディレクティブで上書きできません。
Rails 3.2プロジェクトでstub
ディレクティブを使用する場合は、Edge Railsに切り替えるか、Rails gemをブランチする必要があります。 Sprocketsの依存関係がバージョン2.2.0に変更されました。
Rails 3.2.9のリリース以降、最新のスプロケットにある//= stub
ディレクティブを使用できるように、スプロケットをバージョン2.2.xにロックすることがサポートされています。
//= stub unwanted_js
http://weblog.rubyonrails.org/2012/11/12/ann-Rails-3-2-9-has-been-released/
したがって、それを使用するには、Rails 3.2.9にアップグレードするだけです。
注意:この回答は古くなっており、Sprocketsにこの機能が追加されています。以下の答えを見てください。
===
これは現在のSprocketsディレクティブでは不可能ですが、便利な機能のようです。
必要な各ファイルを手動で一覧表示するもう1つの方法。
おそらく、これを Sprockets リポジトリの機能リクエストとして提出できますか? :-)
よりよく試してください https://github.com/QubitProducts/miniMerge
JSだけでなく、基本モードのスプロケットと互換性があります。
ファイルレベルだけでなく、ブロックや行も除外できます。
複数のソースベースを持つ完全な依存管理。
私は過去にスプロケットを使用していましたが、これはCSSにも使用します。
次のモンキーパッチは私のためにこれを解決します:
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