Подтвердить что ты не робот

Rails 3.1 Sprockets требуют директив - есть ли способ исключить определенные файлы?

Если я использую //=require_tree . в application.css, есть ли способ исключить определенные файлы, кроме обращения к //=require_directory и организации дерева?

Возможно, что-то вроде //= require_tree ., {except: 'something'}

4b9b3361

Ответ 1

Это возможно с помощью новой директивы 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.

Ответ 2

Начиная с выпуска рельсов 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

Ответ 3

Примечание. Этот ответ теперь устарел, с обновлением для Sprockets, имеющим эту функцию. См. Ответ ниже.

===

Это невозможно с текущими директивами Sprockets, но это кажется удобной функцией.

Другой способ вручную перечислить каждый желаемый файл.

Возможно, вы могли бы записать это как запрос функции на Sprockets repo?: -)

Ответ 4

Следующий патч обезьяны решает это для меня:


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

Ответ 5

Попробуйте лучше https://github.com/QubitProducts/miniMerge

Он поддерживает не только JS, но и совместим с базовыми режимами.

Вы можете исключить не только уровни файлов, но и блокировать или даже строки.

Полное управление depenedncies с несколькими исходными базами.

Я использовал звездочки в прошлом, и это лучше, я использую его также для CSS.