5.3 Presentar el libro

En lugar de ejecutar render_book() o preview_chapter() una y otra vez, se puede previsualizar el libro “en vivo” en el navegador web, y lo único que hay que hacer es guardar el archivo Rmd. La función serve_book() en bookdown puede iniciar un servidor web local para presentar la salida HTML basada en el paquete servr (Xie 2017c).

serve_book(dir = ".", output_dir = "_book",
  preview = TRUE, in_session = TRUE, ...)

Sólo tiene que pasar el directorio raíz del libro al argumento dir, y esta función iniciará un servidor web local para que pueda ver la salida del libro usando el servidor. La dirección URL predeterminada para acceder a la salida del libro es http://127.0.0.1:4321. Si ejecuta esta función en una sesión interactiva de R, este URL se abrirá automáticamente en su navegador web. Si se encuentra en la IDE RStudio, el visor de RStudio se utilizará como el navegador web por defecto, por lo que se podrá escribir en los archivos de origen Rmd y ver la salida en el mismo entorno (por ejemplo, la fuente en la izquierda y la salida en el derecha).

El servidor atenderá a los cambios en el directorio raíz del libro: siempre que modifique los archivos en el directorio de libro, serve_book() puede detectar los cambios, volver a compilar los archivos Rmd, y refrescar el navegador web de forma automática. Si los archivos modificados no incluyen archivos Rmd, sólo se actualiza el navegador (por ejemplo, si sólo actualizó un determinado archivo CSS). Esto significa que una vez que se inicie el servidor, todo lo que tiene que hacer es simplemente escribir el libro y guardar los archivos. La compilación y previsualización se llevarán a cabo automáticamente al guardar archivos.

Si en realidad no se toma demasiado tiempo para volver a compilar todo el libro, es posible establecer el argumento preview = FALSE, de modo que cada vez que se actualice el libro, todo el libro se vuelve a compilar, de lo contrario sólo los capítulos modificados se vuelven a compilar a través de preview_chapter().

Los argumentos ... se pasan a servr::httw(), y debe consultarse la página de ayuda para conocer todas las opciones posibles, como port y daemon. Hay ventajas y desventajas al utilizar in_session = TRUE o FALSE:

  • Para in_session = TRUE, tendrá acceso a todos los objetos creados en el libro en la sesión actual de R: si utiliza un servidor endemoniado (a través del argumento daemon = TRUE), puede revisar los objetos en cualquier momento cuando la sesión de R actual no esté ocupado; de lo contrario tendrá que detener el servidor antes de poder revisar los objetos. Esto puede ser útil cuando necesite explorar de forma interactiva los objetos de R en el libro. La desventaja de in_session = TRUE es que la salida puede ser diferente con el libro compilado a partir de una sesión de R fresca, porque el estado de la sesión de R actual puede no estar limpio.

  • Para in_sesion = FALSE, no tiene acceso a los objetos del libro en la sesión actual de R, pero es más probable que la salida sea reproducible, ya que todo se crea a partir de las nuevas sesiones de R. Como esta función es sólo para propósitos de previsualización, la limpieza de la sesión de R no puede es una gran preocupación.

Usted puede elegir in_session = TRUE o FALSE dependiendo de sus casos de uso específicos. Con el tiempo, se debe ejecutar render_book() desde una sesión de R fresca para generar una copia fiable de la salida del libro.

Referencias

Xie, Yihui. 2017c. Servr: A Simple Http Server to Serve Static Files or Dynamic Documents. https://CRAN.R-project.org/package=servr.