Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails 3.1链轮需要指令-是否有排除特定文件的方法?_Javascript_Ruby On Rails_Sprockets - Fatal编程技术网

Javascript Rails 3.1链轮需要指令-是否有排除特定文件的方法?

Javascript Rails 3.1链轮需要指令-是否有排除特定文件的方法?,javascript,ruby-on-rails,sprockets,Javascript,Ruby On Rails,Sprockets,如果我在application.css中使用//=require\u tree.,除了求助于/=require\u目录和树组织之外,是否有其他方法排除特定文件 可能类似于/=require_tree.{除了:'something'}NB:这个答案现在已经过时了,链轮的更新具有此功能。见下面的答案 === 这在当前链轮指令中是不可能的,但它似乎是一个方便的功能 另一种方法是手动列出所需的每个文件 也许您可以将其作为功能请求提交到repo上?:-) 以下猴子补丁为我解决了这个问题: module

如果我在application.css中使用
//=require\u tree.
,除了求助于
/=require\u目录和树组织之外,是否有其他方法排除特定文件


可能类似于
/=require_tree.{除了:'something'}

NB:这个答案现在已经过时了,链轮的更新具有此功能。见下面的答案

===

这在当前链轮指令中是不可能的,但它似乎是一个方便的功能

另一种方法是手动列出所需的每个文件


也许您可以将其作为功能请求提交到repo上?:-)

以下猴子补丁为我解决了这个问题:


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

这可以通过链轮v2.2.0及更高版本中提供的新的
存根
指令实现。但是,Rails 3.2将仅使用链轮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的链轮依赖项修改为2.2.0版,以分支Rails gem

自rails 3.2.9发布以来,它支持将链轮锁定到2.2.x版本,以便我们可以使用最新链轮所具有的
/=stub
指令

//= stub unwanted_js

因此,要使用它,只需升级到Rails 3.2.9,尝试更好的方法

它不仅支持JS,而且在基本模式下与链轮兼容

您不仅可以排除文件级别,还可以排除块甚至行

具有多个源库的完全依赖性管理


我以前用过链轮,这一个更好,我也用它来做CSS。

这将是一个方便的功能。但它看起来不会被添加。看看这现在是可能的,看看我的答案。好消息,但我写这篇文章时答案是正确的,所以现在否决这篇文章并不公平。:-)我不能更改它,也不能在它被标记为答案时删除它!当前版本的导轨(3.2.2)依赖于链轮2.1.2,而链轮2.1.2没有此功能!“gem list sprockets”来获取您的安装版本这也适用于从Rails 3.2.9开始的样式表。另外,注意您的文件命名约定。如果您的文件名为jsfile.js,请不要使用//=stub-jsfile_-js,它将无法工作。而是使用//=stub jsfile。我是否也可以将stub用于特定的供应商资产文件夹?我一直在尝试相同的方法,但不起作用。存根可能会导致意外行为。这不仅仅是“不包括此文件”,而是“不包括此文件,也不包括其依赖项”。如果这两个文件中都包含依赖项,那么它将在使用“存根”的文件中被删除。嗨@Roman,我也希望这能起作用。因此,我在文件
config/initializers/sprockets.rb
中添加了上面的补丁,并使用了该指令,它仍然得到了服务。我使用的是rails 3.2.1和链轮2.1.3。谢谢,但我应该将此文件放在哪里?在
lib
config/initializer
中尝试,两者都不起作用。Gemfile.lock中的rails和链轮的版本是什么?我在rails 3.2.9上,这个文件在初始化程序中。这个补丁程序是否可以排除目录?看起来不像,不知道。。最后,这不值得花时间。Juts将内容放在一些子目录中,只使用require_dir而不使用require_tree。