问题描述
我正在尝试自动化我的 blogdown 站点的构建过程。
我有几页只需要更新 yaml 标头中的日期。
这些页面下载数据,然后生成更新的报告。
我的问题:当我手动更改日期并仅通过工具栏上的“编织”按钮编织文件时,查看器窗口中的站点将具有更新后的文件并在内容页面上显示其链接。
但是当我进一步运行代码时,文件将被呈现,但查看器(以及指向本地服务器的浏览器)将不再显示这些条目和文件。
library(tidyverse)
library(knitr)
library(fs)
library(here)
library(rmarkdown)
library(blogdown)
change_yaml_matter <- function(input_file,...,output_file) {
input_lines <- readLines(input_file)
delimiters <- grep("^---\\s*$",input_lines)
if (!length(delimiters)) {
stop("unable to find yaml delimiters")
} else if (length(delimiters) == 1L) {
if (delimiters[1] == 1L) {
stop("cannot find second delimiter,first is on line 1")
} else {
# found just one set,assume it is *closing* the yaml matter;
# fake a preceding line of delimiter
delimiters <- c(0L,delimiters[1])
}
}
delimiters <- delimiters[1:2]
yaml_list <- yaml::yaml.load(
input_lines[ (delimiters[1]+1):(delimiters[2]-1) ])
dots <- list(...)
for (element_name in names(dots)){
if(element_name %in% names(yaml_list)) {
yaml_list[element_name] <- dots[element_name]
} else {
yaml_list <- c(yaml_list,dots[element_name])
}
}
output_lines <- c(
if (delimiters[1] > 0) input_lines[1:(delimiters[1])],strsplit(yaml::as.yaml(yaml_list),"\n")[[1]],input_lines[ -(1:(delimiters[2]-1)) ]
)
if (missing(output_file)) {
return(output_lines)
} else {
writeLines(output_lines,con = output_file)
return(invisible(output_lines))
}
}
dir_ls(
file.path(here(),"content","post")
) ->
content_dirs
content_dirs %>%
file.path("index.Rmd") ->
files_to_change
for (f in files_to_change){
change_yaml_matter(f,date=as.character(Sys.Date()),output_file=f)
}
build_dir(file.path(
here(),"content")
)
build_site(local=TRUE,run_hugo=TRUE)
hugo_build()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)