如何在 rake-pipeline 中自定义 MinispadeFilter 使用的标识符
根据这个问题:设置 rake-pipeline 以与把手和 Google App Engine 一起使用
我通过 rake-pipeline 使用 MinispadeFilter 作为我的依赖项管理系统。
我看到的奇怪的事情是,coffeescript 和handlebars 文件将其minispade 标识符设置为tmp 目录(我假设工作正在进行的地方)。 screencast.com/t/wIXmREcreW
有没有办法将其设置为根路径以使其标准化?同样,我的 js 文件虽然不指向 tmp 路径,但指向原始资产路径而不是公共路径。我知道它只是一个标识符,但我应该期望它们引用公共路径吗? screencast.com/t/k9kZNcPo
Per this question: Setting up rake-pipeline for use with handlebars alongside Google App Engine
I'm using a MinispadeFilter as my dependency management system via rake-pipeline.
The weird thing I'm seeing is the coffeescript and handlebars files have their minispade identifier set to a tmp directory (I'm assuming, where the work is being done). screencast.com/t/wIXmREcreW
Is there a way to set that to a root path such that it is normalized? Likewise my js files, while not pointing to a tmp path, are pointing to the original assets path instead of the public path. I know its just an identifier, but should I expect them to reference the public path? screencast.com/t/k9kZNcPo
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MinispadeFilter 在默认情况下生成模块标识符方面非常愚蠢。它只是根据输入文件的路径命名它们。您可以在其中看到来自handlebars 和coffeescript 的tmp 目录,因为minispade 过滤器从管道将它们转换为javascript 的位置获取模块id。
该过滤器采用
:module_id_generator
选项,允许您自定义模块 id 的生成。如果您不熟悉 Ruby,这对您来说可能有点繁重,所以请耐心等待。 module_id_generator 选项采用 Ruby 过程,就像 JS 中的匿名函数。然后,过滤器获取您传入的这个过程并为每个输入文件执行它,向您的过程传递一个代表输入文件的 FileWrapper 对象,并且您的过程应该返回一个将用作模块的字符串该文件的 id。这是我的一个项目中的匹配块:
:module_id_generator
是一个过程,它采用名为input
的FileWrapper
并将其转换为模块 id我想。输入文件的路径可作为input
上的path
方法使用。在本例中,我的 JS 文件位于lib/
目录中,因此我使用 Ruby 的sub
方法来替换开头的lib/
部分路径与timelog
(项目名称),然后再次删除.js
扩展名。因此,名为lib/models.js
的 js 文件将获得timelog/models
的模块 ID。The MinispadeFilter is pretty dumb about generating module identifiers by default. It just names them after the path of the input files. You're seeing the tmp dirs in there from handlebars and coffeescript because the minispade filter is getting the module id from the place where the pipeline turns them into javascript.
The filter takes a
:module_id_generator
option which allows you to customize the generation of module ids. If you're not familiar with Ruby, this may be a little heavy for you, so bear with me. The module_id_generator option takes a Ruby proc, which is like an anonymous function in JS. The filter then takes this proc that you pass in and executes it for each input file, passing your proc aFileWrapper
object representing the input file, and your proc should return a string that will be used as the module id for that file.Here's a match block from one of my projects:
The
:module_id_generator
is a proc which takes aFileWrapper
namedinput
and turns it into the module id I want. The input file's path is available as thepath
method oninput
. In this case, my JS files are in alib/
directory, so I use Ruby'ssub
method to replace the beginninglib/
part of the path withtimelog
(the name of the project) then again to remove the.js
extension. So a js file namedlib/models.js
would get a module id oftimelog/models
.