D.5 Rutas de figuras y otras dependencias {# dep-path}

Una de las tareas más desafiantes en el desarrollo del paquete blogdown es manejar adecuadamente los archivos de dependencia de las páginas web. Si todas las páginas de un sitio web estuvieran en texto plano sin dependencias como imágenes o librerías de JavaScript, hubiera sido mucho más fácil desarrollar el paquete blogdown.

Después de que blogdown compila cada documento Rmd en HTML, intentará detectar las dependencias (si las hay) del código fuente HTML y las copiará en la carpeta static/, para que Hugo las copie luego en public/ . La detección depende de las rutas de las dependencias. De forma predeterminada, todas las dependencias, como las representaciones R y las librerías para HTML widgets, se generan en el directorio foo_files/ si la Rmd se llama foo.Rmd. Específicamente, los gráficos R se generan a foo_files/figure-html/ y el resto de los archivos bajo foo_files/ son típicamente de HTML widgets.

Los gráficos de R bajo content/*/foo_files/figure-html/ se copian a static/*/foo_files/figure-html/, y las rutas en las etiquetas HTML como <img src="foo_files/figure-html/bar.png"/> se sustituyen por /*/foo_files/figure-html/bar.png. Tenga en cuenta que la barra diagonal indica el directorio raíz del sitio web publicado, y la sustitución funciona porque Hugo copiará */foo_files/figure-html/ de static/ a public/.

Cualquier otro archivo bajo foo_files/ se trata como archivo de dependencia de HTML widgets, y se copiará a static/rmarkdown-libs/. Las rutas originales en HTML también serán sustituidos en consecuencia, por ejemplo, del <script src = "foo_files/jquery/jquery.min.js"> a <script src ="/rmarkdown-libs/jquery/jquery.min.js ">. No importa si estos archivos son generados por HTML widgets o no. Los enlaces en el sitio web publicado serán correctos y normalmente ocultos a los lectores de las páginas.45

No debe modificar la opción knitr chunk fig.path o cache.path a menos que el proceso anterior sea completamente claro para usted, y quiera manejar las dependencias usted mismo.

En los casos poco frecuentes en los que blogdown no detecta y copia algunas de sus dependencias (p. ej., osó un paquete de HTML widgets bastante sofisticado que escribe archivos en rutas personalizadas), tiene dos opciones posibles:

  • No ignore _files$ en la opción ignoreFiles en config.toml, no personalice la opción permalinks, y configure la opción uglyURLs en true. De esta forma, blogdown no sustituirá las rutas que no puede reconocer, y Hugo copiará estos archivos a public/. Las ubicaciones de archivo relativas del archivo *.html y sus dependencias seguirán siendo las mismas cuando se copien en public/, de modo que todos los enlaces continuarán funcionando.

  • Si elige ignorar _files$ o ha personalizado la opción permalinks, debe asegurarse de que blogdown pueda reconocer las dependencias. Un enfoque es usar la ruta devuelta por la función auxiliar blogdown::dep_path() para escribir archivos de dependencia adicionales. Básicamente, esta función devuelve la opción actual fig.path en knitr, que por defecto es *_files/figure-html/. Por ejemplo, puede generar un trazado manualmente bajo dep_path(), y blogdown lo procesará automáticamente (copie el archivo y sustituya la ruta de la imagen).

Si no entiende todos estos detalles técnicos, le recomendamos que use la primera opción, y deberá sacrificar los enlaces permanentes personalizados y las URL limpias (por ejemplo, /about.html en lugar de /about/). Con esta opción, también puede personalizar la opción fig.path para fragmentos de código si lo desea.


  1. Por ejemplo, un lector no verá la etiqueta <script> en una página, por lo que realmente no importa lo que su atributo src parece siempre que sea una ruta que realmente existe.