我尝试使用摇动将一些markdonw文件转换为html(“烘烤”)。降价文件位于“面团”目录中,并且html应当进入“烘焙”目录。目标是产生index.html
文件,该文件链接其他文件。
这是我第一次使用摇动!
转换有效,但最后第一条规则产生了错误
`rule finished running but did not produce file:`
原因可能是index.html
文件是在第二条规则之前生成的。我怎样才能告诉第一个规则不要期望结果(或再次强制生产)?
第二个问题:如何更改第一个规则以收集扩展名为“ md”和“ markdown”的文件?
谢谢您的帮助!欢迎提出改进建议!
bakedD = "site/baked" -- toFilePath bakedPath
doughD = "site/dough"
shakeWrapped :: IO ()
shakeWrapped = shakeArgs shakeOptions {shakeFiles=bakedD
, shakeVerbosity=Loud
, shakeLint=Just LintBasic
} $
do
want ["index"<.>"html"]
"index"<.>"html" %> \out ->
do
mds <- getDirectoryFiles doughD ["//*.md"]
let htmlFiles = [bakedD </> md -<.> "html" | md <- mds]
need htmlFiles
liftIO $ bakeOneFileIO "baked/index.html"
(bakedD <> "//*.html") %> \out ->
do
let c = dropDirectory1 $ out -<.> "md"
liftIO $ bakeOneFileIO c
答案 0 :(得分:0)
该错误消息指出,您声明了要产生index.html
的文件,但没有产生该文件。通过阅读您的构建系统,它似乎会产生based/index.html
?如果是这样,请将want
行区域更改为:
do
want ["baked/index.html"]
"baked/index.html" %> \out ->
现在您说的是在执行结束时要生成文件baked/index.html
,这是生成baked/index.html
的规则。 (如果它确实产生site/baked/index.html
,则进行适当调整。)
解决第二个问题,mds <- getDirectoryFiles doughD ["//*.md","//*.markdown"]
将同时检测到两个扩展名。
关于样式提示,使用"index" <.> "html"
并没有真正帮助-"index.html"
相同,但更易于阅读。除此之外,这似乎很惯用。
答案 1 :(得分:0)
问题是第一个规则需要一个文件,但是第二个规则包含(并产生了)该文件。有迹象表明,在这种有问题的情况下,该规则未使用\out
变量,并且不需要产生index.htm
(因为它包含在第二条规则中)。可以将其视为一种假性规则适当并简化代码的指示:
bakedD = "site/baked" -- toFilePath bakedPath
doughD = "site/dough"
shakeWrapped :: IO ()
shakeWrapped = shakeArgs shakeOptions {shakeFiles=bakedD
, shakeVerbosity=Loud
, shakeLint=Just LintBasic
} $
do
want ["allMarkdownConversion"]
phony "allMarkdownConversion" $
do
mds <- getDirectoryFiles doughD ["//*.md"] -- markdown ext ??
let htmlFiles = [bakedD </> md -<.> "html" | md <- mds]
-- liftIO $ putIOwords ["shakeWrapped - htmlFile", showT htmlFiles]
need htmlFiles
(bakedD <> "//*.html") %> \out ->
do
let c = dropDirectory1 $ out -<.> "md"
liftIO $ bakeOneFileIO c
我认为抖动是一种将缓存添加到静态站点生成器的非常方便的方法;它只会重建所需的内容!