【问题标题】:How do you customize the identifier used by MinispadeFilter in rake-pipeline如何自定义 MinispadeFilter 在 rake-pipeline 中使用的标识符
【发布时间】:2011-12-20 02:35:35
【问题描述】:

根据这个问题:Setting up rake-pipeline for use with handlebars alongside Google App Engine

我通过 rake-pipeline 使用 MinispadeFilter 作为我的依赖管理系统。

我看到的奇怪的事情是coffeescript 和handlebars 文件将它们的minispade 标识符设置为tmp 目录(我假设正在完成工作)。 screencast.com/t/wIXmREcreW

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

【问题讨论】:

    标签: ruby rake


    【解决方案1】:

    MinispadeFilter 在默认情况下生成模块标识符非常愚蠢。它只是在输入文件的路径之后命名它们。您从车把和咖啡脚本中看到了 tmp 目录,因为 minispade 过滤器正在从管道将它们转换为 javascript 的位置获取模块 ID。 该过滤器采用:module_id_generator 选项,允许您自定义模块ID 的生成。如果你不熟悉 Ruby,这对你来说可能有点沉重,所以请多多包涵。 module_id_generator 选项采用 Ruby proc,类似于 JS 中的匿名函数。然后过滤器获取您传入的这个proc并为每个输入文件执行它,向您的proc传递一个代表输入文件的FileWrapper对象,并且您的proc应该返回一个字符串,该字符串将用作该文件的模块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 是一个过程,它接受一个名为 inputFileWrapper 并将其转换为我想要的模块 ID。输入文件的路径可用作input 上的path 方法。在这种情况下,我的 JS 文件位于 lib/ 目录中,因此我使用 Ruby 的 sub 方法将路径的开头 lib/ 部分替换为 timelog(项目名称)然后再次删除.js 分机。所以一个名为 lib/models.js 的 js 文件会得到一个模块 id 为 timelog/models

    【讨论】:

    • 太棒了。很好的解释。谢谢达德利夫
    猜你喜欢
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多