如何在 rake-pipeline 中自定义 MinispadeFilter 使用的标识符

发布于 2024-12-22 04:29:47 字数 506 浏览 0 评论 0原文

根据这个问题:设置 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮年 2024-12-29 04:29:47

MinispadeFilter 在默认情况下生成模块标识符方面非常愚蠢。它只是根据输入文件的路径命名它们。您可以在其中看到来自handlebars 和coffeescript 的tmp 目录,因为minispade 过滤器从管道将它们转换为javascript 的位置获取模块id。
该过滤器采用 :module_id_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 是一个过程,它采用名为 inputFileWrapper 并将其转换为模块 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 a FileWrapper 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:

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

The :module_id_generator is a proc which takes a FileWrapper named input and turns it into the module id I want. The input file's path is available as the path method on input. In this case, my JS files are in a lib/ directory, so I use Ruby's sub method to replace the beginning lib/ part of the path with timelog (the name of the project) then again to remove the .js extension. So a js file named lib/models.js would get a module id of timelog/models.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文