4.1 Desde Jekyll
Al convertir un sitio web de Jekyll en Hugo, la parte más desafiante es el tema. Si desea mantener exactamente el mismo tema, deberá volver a escribir las plantillas de Jekyll utilizando la sintaxis de Hugo (consulte la sección ??). Sin embargo, si puede encontrar un tema existente en Hugo (https://themes.gohugo.io), las cosas serán mucho más fáciles, y usted solo necesita mover el contenido de su sitio web a Hugo, lo cual es relativamente fácil. Básicamente, copie las páginas y publicaciones de Markdown en el directorio content/
en Hugo y modifique estos archivos de texto.
Usualmente, las publicaciones en Jekyll están bajo el directorio _posts/
, y puedes moverlas a content/post/
(puede usar otros directorios). Luego, debe definir una regla personalizada para las URL permanentes en config.toml
(consulte la sección 2.2.2):
Esto depende del formato de las URL que utilizó en Jekyll (consulte la opción permalink
en su _config.yml
).
Si hay archivos estáticos como imágenes, se pueden mover al directorio static/
en Hugo.
Luego necesita usar su herramienta favorita con algunas técnicas de manipulación de cadenas de caracteres para procesar todos los archivos Markdown. Si usa R, puede listar todos los archivos Markdown y procesarlos uno por uno en un bucle. A continuación se muestra un boceto del código:
files = list.files(
'content/', '[.](md|markdown)$', full.names = TRUE,
recursive = TRUE
)
for (f in files) {
blogdown:::process_file(f, function(x) {
# process x here and return the modified x
x
})
}
La función process_file()
es una función auxiliar interna en blogdown. Se necesita un nombre de archivo y una función de procesador para manipular el contenido del archivo y escribe el texto modificado de nuevo en el archivo.
Para darle una idea de cómo puede ser una función de procesador, proporcioné algunas funciones simples de ayuda en blogdown, y a continuación hay dos de ellas:
function (f)
process_file(f, function(x) {
x = paste(gsub("\\s+$", "", x), collapse = "\n")
trim_ws(gsub("\n{3,}", "\n\n", x))
})
<environment: namespace:blogdown>
function (f)
process_file(f, function(x) {
gsub("\\[([^]]+)]\\(\\1/?\\)", "<\\1>", x)
})
<environment: namespace:blogdown>
La primera función sustituye dos o más líneas vacías con una sola línea vacía. La segunda función reemplaza los enlaces de la forma [url](url)
con <url>
. Sin embargo, no hay nada de malo con las líneas vacías excesivas o la sintaxis [url](url)
. Estas funciones auxiliares pueden hacer que su texto de Markdown sea un poco más limpio. Puede encontrar todas las funciones auxiliares en https://github.com/rstudio/blogdown/blob/master/R/clean.R. Tenga en cuenta que no se exportan de blogdown, por lo que necesita tres puntos y coma para acceder a ellos.
Es posible que los metadatos YAML de sus publicaciones no estén completamente limpios, especialmente cuando su sitio web Jekyll se convirtió de un sitio web anterior de WordPress. La función auxiliar interna blogdown:::modify_yaml()
puede ayudarlo a limpiar los metadatos. Por ejemplo, a continuación se muestran los metadatos YAML de una publicación de blog de Simply Statistics cuando se creó en Jekyll:
---
id: 4155
title: Announcing the JHU Data Science Hackathon 2015
date: 2015-07-28T13:31:04+00:00
author: Roger Peng
layout: post
guid: http://simplystatistics.org/?p=4155
permalink: /2015/07/28/announcing-the-jhu-data-science-hackathon-2015
pe_theme_meta:
- 'O:8:"stdClass":2:{s:7:"gallery";O:8:"stdClass":...}'
al2fb_facebook_link_id:
- 136171103105421_837886222933902
al2fb_facebook_link_time:
- 2015-07-28T17:31:11+00:00
al2fb_facebook_link_picture:
- post=http://simplystatistics.org/?al2fb_image=1
dsq_thread_id:
- 3980278933
categories:
- Uncategorized
---
Puede descartar los campos YAML que no son útiles en Hugo. Por ejemplo, solo puede mantener los campos title
, author
, date
, categories
y tags
, y descartar otros campos. En realidad, es posible que también desee agregar un campo slug
que tome el nombre de archivo base de la publicación (sin la fecha inicial). Por ejemplo, cuando el nombre del archivo postal es 2015-07-28-announceing-the-jhu-data-science-hackathon-2015.md
, es posible que desee agregar slug: announcing-the-jhu-data-science-hackathon-2015
para asegurarse de que la URL de la publicación en el nuevo sitio siga siendo la misma.
Aquí está el código para procesar los metadatos YAML de todas las publicaciones:
for (f in files) {
blogdown:::modify_yaml(f, slug = function(old, yaml) {
# YYYY-mm-dd-name.md -> name
gsub('^\\d{4}-\\d{2}-\\d{2}-|[.](md|markdown)', '', f)
}, categories = function(old, yaml) {
# remove the Uncategorized category
setdiff(old, 'Uncategorized')
}, .keep_fields = c(
'title', 'author', 'date', 'categories', 'tags', 'slug'
), .keep_empty = FALSE)
}
Puede pasar una ruta de archivo a modify_yaml()
, definir nuevos valores YAML (o funciones para devolver nuevos valores basados en los valores anteriores) y decidir qué campos conservar (.keep_fields
). Puede descartar campos vacíos a través de .keep_empty = FALSE
. Los metadatos YAML procesados están a continuación, lo que parece mucho más limpio: