42 votes

Rails 3.1 Sprockets nécessitent des directives - existe-t-il un moyen d'exclure des fichiers particuliers?

Si j'utilise //=require_tree . dans application.css, existe-t-il un moyen d'exclure des fichiers particuliers autres que le recours à //=require_directory et à l'organisation arborescente?

Peut-être quelque chose comme //= require_tree ., {except: 'something'}

64voto

Joseph Jaber Points 2922

C'est possible avec Pignon de la nouvelle - stub directive, qui est disponible dans les Pignons v2.2.0 et. Cependant, les Rails 3.2 ne jamais utiliser des Pignons v2.1.3 qui n'ont pas cette fonction. A partir de maintenant, le Bord des Rails a l' stub directive et il sera officiellement dans les Rails 4.0 et ci-dessus.

Utilisation:

//= require jquery
//= require_tree .
//= stub unwanted_js

stub directives peut pas être modifiée par la suite require ou include directives.

Si vous souhaitez utiliser l' stub directive dans les Rails 3.2 le projet que vous aurez à passer à Bord des Rails, ou d'une branche de votre gem Rails avec ses Pignons de dépendance modifié pour la version 2.2.0.

17voto

Millisami Points 2256

Depuis la publication de rails 3.2.9, il permet de verrouiller les sporckets sur la version 2.2.x afin que nous puissions utiliser la directive //= stub que possèdent les derniers pignons.

 //= stub unwanted_js
 

http://weblog.rubyonrails.org/2012/11/12/ann-rails-3-2-9-has-been-released/

Donc, pour l'utiliser, il suffit de passer à Rails 3.2.9

4voto

Richard Hulse Points 7610

NB: Cette réponse est maintenant obsolète, avec une mise à jour pour Sprockets ayant cette fonctionnalité. Voir la réponse ci-dessous.

===

Ce n'est pas possible avec les directives Sprockets actuelles, mais cela semble être une fonctionnalité pratique.

L'autre façon de lister manuellement chaque fichier que vous voulez.

Peut-être pourriez-vous archiver ceci sous forme de demande de fonctionnalité sur le référentiel Sprockets ? :-)

0voto

Roman Points 7430

Le patch de singe suivant résout ce problème pour moi:

 
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
 

0voto

brutal de luxe Points 1

Essayez mieux le https://github.com/QubitProducts/miniMerge

Il prend en charge non seulement JS et est en mode de base compatible pignons.

Vous pouvez exclure non seulement les niveaux de fichier, mais également les bloquer ou même les lignes.

Gestion complète des dépendances avec plusieurs bases sources.

J'ai utilisé des pignons dans le passé et celui-ci est meilleur, je l'utilise aussi pour CSS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X