web-dev-qa-db-fra.com

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 à une arborescence?

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

42
tamersalama

Ceci est possible avec la nouvelle directive stub de Sprocket, disponible dans les versions 2.2.0 et suivantes de Sprockets. Cependant, Rails 3.2 n’utilisera jamais que Sprockets v2.1.3 qui n’a pas cette fonctionnalité. À l’heure actuelle, Edge Rails actuel est doté de la directive stub et sera officiellement dans Rails 4.0 et versions ultérieures.

Usage:

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

Les directives stub ne peuvent pas être remplacées par les directives require ou include suivantes.

Si vous souhaitez utiliser la directive stub dans votre projet Rails 3.2, vous devrez basculer vers Edge Rails ou relier votre gem Rails avec sa dépendance Sprockets modifiée à la version 2.2.0. 

63
Joseph Jaber

Depuis la publication de Rails 3.2.9, le système supporte le verrouillage des pignons vers la version 2.2.x afin que nous puissions utiliser la directive //= stub utilisée par 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

17
Autodidact

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 dépôt Sprockets ? :-)

4
Richard Hulse

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

0
brutal de luxe

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
0
Roman