Shiny应用封装为R包函数时www文件夹及CSS/JS文件放置问题问询
解决方案
步骤1:调整静态资源存放路径
把所有静态资源(CSS、JS、图片等)统一放在R包的inst/www目录下,所有资源文件直接放到该目录下即可,不需要额外嵌套层级,也不要存放在其他位置。
步骤2:添加资源路径映射
在你的build_myApp()函数内部,定义UI和启动Shiny应用之前,添加addResourcePath()调用,把包内的www路径映射为Shiny可识别的Web访问前缀,示例代码如下:
build_myApp <- function(dataset1, title, factors) { # 新增资源路径映射代码,放在最前面 addResourcePath( prefix = "myapp-assets", directoryPath = system.file("www", package = "替换为你的R包名称") ) # 后面保留你原有UI、server定义和shinyApp启动逻辑 ui <- myApp_ui(title) server <- myApp_server(dataset1, factors) shinyApp(ui = ui, server = server) }
其中system.file("www", package = "你的R包名称")会自动定位到安装后包内的www目录路径,不受用户本地R包安装位置影响。
步骤3:修改静态资源引用路径
把UI中所有的资源引用路径统一替换为你定义的前缀开头的格式,示例如下:
- 原CSS引用:
tags$link(rel = "stylesheet", type = "text/css", href = "sample1.css")
修改为:tags$link(rel = "stylesheet", type = "text/css", href = "/myapp-assets/sample1.css") - 原JS引用:
tags$script(src="www/sample.js")
修改为:tags$script(src="/myapp-assets/sample.js")
验证操作
修改完成后重新编译安装你的R包,重启R会话再调用build_myApp()即可正常加载所有静态资源。
提示:你可以自定义
addResourcePath的prefix参数值(示例用的是myapp-assets),只要保证资源引用的前缀和你定义的prefix完全一致即可,注意不要和Shiny默认的资源路径重名。
内容的提问来源于stack exchange,提问作者jatkins23
相关产品推荐
相关产品推荐

