Ruby 如何自定义rake管道中MinispadeFilter使用的标识符

Ruby 如何自定义rake管道中MinispadeFilter使用的标识符,ruby,rake,Ruby,Rake,根据这一问题: 我使用minipadefilter作为通过rake管道的依赖关系管理系统 我看到的奇怪的事情是coffeescript和Handlebar文件的minipade标识符被设置为tmp目录(我假设是在这个目录下完成工作的)。screencast.com/t/wIXmREcreW 有没有办法将其设置为根路径,以使其正常化?同样,我的js文件虽然没有指向tmp路径,但指向的是原始资产路径,而不是公共路径。我知道它只是一个标识符,但我应该期望它们引用公共路径吗?screencast.com

根据这一问题:

我使用minipadefilter作为通过rake管道的依赖关系管理系统

我看到的奇怪的事情是coffeescript和Handlebar文件的minipade标识符被设置为tmp目录(我假设是在这个目录下完成工作的)。screencast.com/t/wIXmREcreW


有没有办法将其设置为根路径,以使其正常化?同样,我的js文件虽然没有指向tmp路径,但指向的是原始资产路径,而不是公共路径。我知道它只是一个标识符,但我应该期望它们引用公共路径吗?screencast.com/t/k9kZNcPo

默认情况下,minipadefilter在生成模块标识符方面相当笨拙。它只是根据输入文件的路径来命名它们。您可以从Handlebar和coffeescript中看到tmp目录,因为minispade过滤器从管道将其转换为javascript的位置获取模块id。 该过滤器采用一个
:module\u id\u generator
选项,允许您自定义模块id的生成。如果你不熟悉Ruby,这对你来说可能有点沉重,所以请容忍我。module_id_generator选项采用Ruby进程,这类似于JS中的匿名函数。然后,过滤器接受您传入的这个过程,并对每个输入文件执行它,向您的过程传递一个表示输入文件的
FileWrapper
对象,并且您的过程应该返回一个字符串,该字符串将用作该文件的模块id

下面是我的一个项目的匹配块:

match "**/*.js" do
  minispade :module_id_generator => proc { |input| input.path.sub(/lib\//, 'timelog/').sub(/\.js$/, '') }
  concat "js/app.js"
end

:module_id_generator
是一个进程,它接受名为
input
文件包装器
,并将其转换为我想要的模块id。输入文件的路径可用作
input
上的
path
方法。在本例中,我的JS文件位于
lib/
目录中,因此我使用Ruby的
sub
方法将路径的开头
lib/
部分替换为
timelog
(项目名称),然后再次删除
.JS
扩展名。因此,名为
lib/models.js
的js文件将获得
timelog/models

默认情况下,minipadefilter在生成模块标识符方面相当笨拙。它只是根据输入文件的路径来命名它们。您可以从Handlebar和coffeescript中看到tmp目录,因为minispade过滤器从管道将其转换为javascript的位置获取模块id。 该过滤器采用一个
:module\u id\u generator
选项,允许您自定义模块id的生成。如果你不熟悉Ruby,这对你来说可能有点沉重,所以请容忍我。module_id_generator选项采用Ruby进程,这类似于JS中的匿名函数。然后,过滤器接受您传入的这个过程,并对每个输入文件执行它,向您的过程传递一个表示输入文件的
FileWrapper
对象,并且您的过程应该返回一个字符串,该字符串将用作该文件的模块id

下面是我的一个项目的匹配块:

match "**/*.js" do
  minispade :module_id_generator => proc { |input| input.path.sub(/lib\//, 'timelog/').sub(/\.js$/, '') }
  concat "js/app.js"
end

:module_id_generator
是一个进程,它接受名为
input
文件包装器
,并将其转换为我想要的模块id。输入文件的路径可用作
input
上的
path
方法。在本例中,我的JS文件位于
lib/
目录中,因此我使用Ruby的
sub
方法将路径的开头
lib/
部分替换为
timelog
(项目名称),然后再次删除
.JS
扩展名。因此,名为
lib/models.js
的js文件将获得
timelog/models

的模块id。很好的解释。谢谢达德利,太棒了。很好的解释。谢谢达德利