webr
webr copied to clipboard
How to install packages not available on CRAN?
I'd like to use litedown with webR but running webr::install("litedown") and webr::install("yihui/litedown") both fail saying the package cannot be found.
Any tips here? I suspect the best thing i can do is to build it as part of the {rwasm} build process and mount it.
https://github.com/yihui/litedown
Yes, either build the package using {rwasm}, or create a personal r-universe repository (which builds emscripten packages for you automatically using {rwasm}).
Loading packages directly from GitHub using package references such as org/package is not currently supported, because we don't have the necessary toolchain to build the package from source available to us from inside the browser under Wasm.
Understandable. The challenge with using r-universe is that (as far as i can tell) it doesn't give us the library.data and library.js.metadata for something locally.
It should be possible to download the .data and .js.metadata files directly from R Universe. The URLs are not exposed directly in the web UI, but the files are built as part of the Wasm cross-compilation process, and live in the same directory as the .tgz file.
e.g.
https://r-lib.r-universe.dev/bin/emscripten/contrib/4.4/cli_3.6.3.9000.data https://r-lib.r-universe.dev/bin/emscripten/contrib/4.4/cli_3.6.3.9000.js.metadata
@JosiahParry FYI litedown is on both CRAN and r-universe now.
I can successfully load custom built packages using install.packages("mypackage", repos = "https://example.com/myrepo/"), but I wonder, is there an option i can set via options() to set that repos= path?
I also notice that in the JupyterLite webr kernel at least, library(newpackage) pre-emptively tries to install a missing package from the webR repo:
- can
library()take arepos=style path? - it would be good if we could set a repo path via
options()thatlibrary()called installations could benefit from.
@psychemedia
is there an option i can set via options() to set that repos= path?
Try setting options("webr_pkg_repos").
IIRC the library() shim that preemptively installs packages should also listen to this option.