Ramnat
Estoy escribiendo un paquete R llamado slidify
lo que facilita la generación de diapositivas HTML5 reproducibles a partir de archivos R Markdown. El paquete hace uso de css
y js
archivos de varios marcos de generación de diapositivas HTML5 existentes como dzslides
, deck.js
etc. Actualmente, he organizado las versiones descargadas de estos activos externos en el inst/libraries
carpeta de slidify
, para que esté automáticamente disponible para los usuarios al momento de la instalación. Si bien este enfoque es simple, hay algunas desventajas:
-
Estos marcos se actualizan constantemente en
github
. Con la configuración actual, tendría que enviar una nueva versión del paquete cada vez que se actualice alguno de estos marcos. -
Si hago algún ajuste al valor predeterminado
css
yjs
que vienen con estos marcos, entonces necesito fusionar las actualizaciones con cuidado para no perderslidify
personalizaciones específicas.
Tuve un par de pensamientos sobre cómo manejar esto.
-
No empaquete estas bibliotecas con
slidify
. En su lugar, proporcione unfunction
que permitiría a los usuarios agregar los marcos que deseen. -
Agregue estos marcos al
inst\libraries
carpeta enslidify
pero comosubmodules
. Ahora, no tengo idea si agregarlos comosubmodules
los instalaría si alguien usaradevtools::install_github
.
Entonces, mi pregunta es, al escribir un paquete R, ¿cómo puedo administrar las dependencias externas que no son R que se actualizan constantemente?
Una situación análoga es mirar los paquetes xlsx
y XLConnect
.
Ambos paquetes dependen de las bibliotecas de Java. xlsx
define (y depende de) un paquete independiente xlsxjars
que solo contiene las bibliotecas.
De esta forma, el código descendente se desacopla de las bibliotecas.
Xyand
Resolví un problema similar usando git-subtree
. Eche un vistazo a: Administración de fuentes y binarios de terceros utilizados por código bajo control de fuente
Me gusta mucho tu pregunta; modificó la redacción al final para evitar votos “no constructivos”.
– Jorán
3 de julio de 2012 a las 15:37
Gracias por la edición. Hace que la pregunta sea más clara.
– Ramnat
3 de julio de 2012 a las 15:40
Una posibilidad es mirar paquetes
xlsx
yXLConnect
. Ambos dependen de las bibliotecas de Java.xlsx
define (y depende de) un paquete independientexlsxjars
que solo contiene las bibliotecas. De esta forma, el código descendente se desacopla de las bibliotecas.– Andrie
3 de julio de 2012 a las 15:51
Gracias Andri! Lo investigaré.
– Ramnat
3 de julio de 2012 a las 16:03
Congelar la versión de las dependencias junto con la versión del paquete parece ser la forma más segura. En caso de que uno de los paquetes cambie sustancialmente, su paquete aún puede funcionar sin tener que apresurarse mucho para arreglar las dependencias rotas. También es mejor no sobrescribir los archivos de dependencia, sino sobrecargarlos y cargarlos después de los originales, lo que hace que las cosas sean más manejables.
– Hansi
3 de julio de 2012 a las 16:55