我想为大多数项目配置一个配置。它在我的项目文件夹中搜索任何sass,haml或coffee文件夹。我添加新地点制作sass文件时,我不想更新配置。
启动文件夹结构
- sass
- test.sass
- coffee
- test.coffee
- haml
- test.html.haml
- a
- folder
- somewhere
- deep
- sass
- test2.sass
- coffee
- test2.coffee
- haml
- test2.html.haml
- Guardfile
带有生成的文件和文件夹的通缉文件夹结构:
- sass
- test.sass
- css
- test.css
- coffee
- test.coffee
- js
- test.js
- haml
- test.html.haml
- test.html
- a
- folder
- somewhere
- deep
- sass
- test2.sass
- css
- test2.css
- coffee
- test2.coffee
- js
- test2.js
- haml
- test2.html.haml
- test2.html
- Guardfile
到目前为止,haml与
完美配合guard :haml, input: 'haml' do
watch(/^.+(\.html\.haml)$/)
end
和sass一样,coffeescript的工作方式与完全相同的代码不同
guard :coffeescript, input: 'coffee', output: 'js' do
watch(/^.+(\.coffee)$/)
end
guard :sass, input: 'sass', output: 'css' do
watch(/^.+(\.sass)$/)
end
最终结果导致将目标css和js文件夹放在项目文件夹的根目录中。即使我删除了output:
属性,它也会在根目录下创建一个咖啡和sass文件夹。
结果文件夹结构
- sass
- test.sass
- css
- test.css
- test2.css
- coffee
- test.coffee
- js
- test.js
- test2.js
- haml
- test.html.haml
- test.html
- a
- folder
- somewhere
- deep
- sass
- test2.sass
- coffee
- test2.coffee
- haml
- test2.html.haml
- test2.html
- Guardfile
我不知道发生了什么,有人可以启发我吗?
使用Guard版本2.6.1
答案 0 :(得分:0)
每个插件都有自己对如何解释/使用目录的想法。
在coffeescript中,有一个"技巧"通过将输入目录部分放在regexp组中来告诉它输出目录,例如:
guard :coffeescript, input: 'coffee', output: 'js' do
watch(/^(.+)\\.coffee$/)
end
但是我猜这会产生例如js/a/folder/somewhere/deep
,您需要a/folder/somewhere/deep/js
。
如果你没有指定输出目录,你可能会得到:a/folder/somewhere/deep
- 它很接近,但最后没有/js/
文件夹
事实上,Haml提供了不同的文件,因为虽然您希望(...)coffee/test2.coffee
最终为(...)/js/test2.js
,但您希望(...)/haml/test2.html.haml
最终为(...)/test2.html.haml
,而不是(...)/html/test2.html.haml
{1}}(意思是:你不希望它出现在html
子文件夹中 - 我同意这会很愚蠢)......
...这意味着guard-haml
就是您对其他插件的期望。
所以短篇小说是:
您不能期望guard-coffeescript
和guard-sass
的行为类似于guard-haml, because at the same time you're expecting them to *not* behave the same way (no
html output folder for
。haml`文件 - 这显然是可以理解的。)
在haml的工作中你只想要 ,因为你没有为它提供:output
选项(试试看看会发生什么)。
与此同时,guard-coffeescript
已更新(由我)使用更新版本的后卫,因此模板现在有点不同,您可能需要:
input_dir = 'a/folder/somewhere/deep'
coffeescript_options = {
input: "#{input_dir}/coffee,
output: "#{input_dir}/js",
patterns: [%r{^#{input_dir}/(.+\.(?:coffee|coffee\.md|litcoffee))$}]
}
guard 'coffeescript', coffeescript_options do
coffeescript_options[:patterns].each { |pattern| watch(pattern) }
end
guard-sass
尚未针对较新版本的Guard进行更新(实际上,它从未迁移到Guard 2.0),所以我甚至不愿意去调查。< / p>
我看到的选择是:
更改guard-coffeescript以执行您想要的操作(反向输入/输出文件夹顺序)
重新组织您的结构(可能推荐并更快)
由于Guardfile是纯ruby,你可以选择迭代 - 如果有帮助,例如:
# I don't know which parts of the structure are projects, so I'm guessing it's the first part
Dir[*].each do |project|
next unless File.directory?(project)
next if %w(sass css coffee js).include?(project) #(skip top level non-project folders)
input_dir = "#{project}/a/folder/somewhere/deep"
coffeescript_options = {
input: "#{input_dir}/coffee,
output: "#{input_dir}/js",
patterns: [%r{^#{input_dir}/(.+\.(?:coffee|coffee\.md|litcoffee))$}]
}
guard 'coffeescript', coffeescript_options do
coffeescript_options[:patterns].each { |pattern| watch(pattern) }
end
# guard 'sass' would go here with a similar setup
end