Rails 3.1 Звездочки требуют директив - есть ли способ исключить определенные файлы? - PullRequest
42 голосов
/ 29 сентября 2011

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

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

Ответы [ 5 ]

64 голосов
/ 08 марта 2012

Это возможно с новой директивой Sprocket stub, которая доступна в 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.

17 голосов
/ 24 ноября 2012

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

4 голосов
/ 02 октября 2011

NB. Этот ответ устарел, с обновлением Sprockets, имеющим эту функцию. Смотрите ответ ниже.

===

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

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

Возможно, вы могли бы подать это как запрос на добавление в репозиторий Sprockets ? : -)

0 голосов
/ 05 августа 2014

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

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

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

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

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

0 голосов
/ 07 января 2012

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


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
...