闪亮的范围规则 - 在模块化架构中加载库的位置

Shiny scoping rules - where to load libraries in modular architecture

对于这个问题,我只想弄清楚在使用 Shiny 应用程序时使用包的最佳方法。尽管与询问 R-related questions 的良好做法相反,该问题不包含代码或可重现的示例,但我希望它涉及实际和相关问题。

问题

我正在开发具有以下结构的 modular 闪亮应用程序:

图书馆

我想知道的是如何加载最适合上述应用程序结构的程序包。我特别想知道:

  1. 加载库就足够时 global.R 以及何时(如果有的话)可能需要跨模块文件加载库and/or server.R / ui.r?

    1.2。例如,当使用 shinyTree 包时,我将其加载到 server.Rui.R 中,据我所知,这是从示例中得出的。模块和函数使用 dplyr / tidyr 组合,加载这些包是否足够 global.R?

  2. 我首选的加载包的方法如下所示: Vectorize(require)(package = c("ggvis", "SPARQL", "jsonlite", "dplyr", "tidyr", "magrittr"), character.only = TRUE),它是否适用于上述架构?

这是我的两分钱:

  • 要加载的包需要在 app.R 文件的开头、app.R 的服务器端或模块文件中声明。
  • 在模块中,可以在 fooUIfooServer 模块函数之外或内部声明库。两者都有效。
  • 为了模块的可重用性,我更喜欢在每个 module*.R 文件的开头声明它们。
  • 至少对我来说,加载到 global.R 文件的库,不会 获取模块,因此它们可以 运行。我的假设是它不会在 app.R 环境中加载。我知道 global.R 是从 serverui 加载共享对象到 set some configuration