D.3 Construyendo un sitio web para vista previa local

La función blogdown::build_site() tiene un argumento local que por defecto es FALSE, lo que significa construir el sitio web para publicación en lugar de vista previa local. El modo local = TRUE es principalmente para blogdown::serve_site() para presentar el sitio web localmente. Hay tres diferencias principales entre local = FALSE y TRUE. Cuando local = TRUE:

  • La opción baseurl en config.toml se reemplaza temporalmente por "/" aunque haya configurado una URL completa como "http://www.example.com/".44 es porque cuando un sitio web se va a obtener una vista previa localmente, los enlaces deben hacer referencia a los archivos locales. Por ejemplo, se debe usar /about/index.html en lugar del enlace completohttp://www.example.com/about/index.html; la función serve_site() sabe que /about/index.html significa el archivo bajo el directorio public/, y puede buscarlo y mostrarle el contenido, de lo contrario, su navegador lo llevará al sitio web http://www.example.com en lugar de mostrar un archivo local.

  • Las publicaciones en borrador y futuras siempre se muestran cuando local = TRUE, pero no cuando local = FALSE. Esto es para que pueda obtener una vista previa del borrador y futuras publicaciones localmente. Si conoce la línea de comandos de Hugo significa que se llama al comando hugo con las banderas -D -F, o equivalentemente, --buildDrafts --buildFuture.

  • Hay un mecanismo de almacenamiento en caché para acelerar la creación de su sitio web: un archivo Rmd no se volverá a compilar cuando su archivo de salida *.html sea más reciente (en términos de tiempo de modificación de archivos). Si desea forzar build_site(local = TRUE) para recompilar el archivo Rmd incluso si es anterior al resultado HTML, debe eliminar el resultado HTML o editar el archivo Rmd para que su hora de modificación sea más reciente. Este mecanismo de almacenamiento en caché no se aplica a local = FALSE, es decir, build_site(local = FALSE)siempre recompilará todos los archivos Rmd, porque cuando desee publicar un sitio, es posible que deba recompilarlo todo para asegurarse de que el sitio está completamente regenerado. Si tiene fragmentos de código que consumen mucho tiempo en cualquier archivo Rmd, debe usar cualquiera de estos métodos para ahorrar tiempo:

    • Active el almacenamiento en caché de knitr para la pérdida de tiempo de los trozos de código, i.e., la opción de chunk cache = TRUE.

    • No llame build_site(), sino blogdown::hugo_build() en su lugar . Este último no compila ningún archivo Rmd, simplemente ejecuta el comando hugo para construir el sitio. Utilice este método solo si está seguro de que sus archivos Rmd no necesitan ser recompilados.

No necesita preocuparse por estos detalles si su sitio web se genera automáticamente desde la fuente a través de un servicio como Netlify, que hará uso de baseurl y no usar -D -F de forma predeterminada. Si publica manualmente la carpeta public/, debe tener más cuidado:

  • Si su sitio web no funciona sin el baseurl completo, o si no desea que se publiquen los borradores o las publicaciones futuras, no debe publicar el directorio public/ generado por serve_site(). Siempre ejecute blogdown::build_site() o blogdown::hugo_build() antes de subir este directorio a un servidor web.

  • Si sus borradores y publicaciones futuras contienen información (sensible al tiempo), se recomienda mucho eliminar el directorio /public/ antes de reconstruir el sitio para publicarlo todo el tiempo, porque Hugo nunca lo elimina, y su información confidencial puede ser presentada por una determinada llamada build_site(local = TRUE) la última vez y la dejarla en el directorio. Si el sitio web es realmente importante, y necesita asegurarse de que no se arruinará nada cada vez que lo publique, coloque el directorio /public/ bajo control de versiones, para que pueda ver qué archivos se cambiaron antes de publicar el nuevo sitio.


  1. Si su baseurl contiene un subdirectorio, será reemplazado por el nombre del subdirectorio. Por ejemplo, para baseurl=" http://www.example.com/project/ ", build_site(local =TRUE) eliminará temporalmente el nombre de dominio y solo usará el valor /project/.