如何自定义修改R Shiny包中的JavaScript代码并重新构建使其生效?
如何自定义修改R Shiny包中的JavaScript代码并重新构建使其生效?
你遇到的问题很典型——直接修改编译后的shiny.js不会生效,因为Shiny的前端核心代码现在是用TypeScript编写的,shiny.js只是TypeScript编译后的产物,重新构建包的时候会被覆盖掉。下面是一步步的正确操作流程:
1. 准备工作与代码克隆
首先确保你的环境里装了Node.js和npm(TypeScript编译需要它们),然后:
- 克隆Shiny 1.7.1版本的代码仓库,注意要切换到对应的tag版本,而非默认的master分支:
git clone https://github.com/rstudio/shiny.git cd shiny git checkout v1.7.1
2. 找到对应的TypeScript源文件
你要修改的$sendMsg函数,对应的TypeScript源文件是srcjs/shiny/Socket.ts(在Shiny 1.7.1版本中)。打开这个文件,能找到逻辑和shiny.js里一致的方法,只是语法是TypeScript规范的。
3. 修改TypeScript代码
按照你的需求调整这个方法的逻辑,比如修改消息发送的判断条件或处理流程,保存文件即可。
4. 安装前端依赖并编译代码
进入srcjs目录,先安装编译所需的npm依赖:
cd srcjs npm install
依赖安装完成后,执行编译命令,把TypeScript代码编译为JavaScript:
npm run build
这一步会将编译好的shiny.js(及相关压缩版)更新到R包的inst/www/shared/目录下,也就是你之前直接修改的文件位置。
5. 重新构建并安装修改后的Shiny包
回到Shiny包的根目录,用R的devtools包重新构建并安装:
# 若未安装devtools先执行安装 install.packages("devtools") # 构建并安装本地修改后的包 devtools::install()
验证修改是否生效
安装完成后,启动一个简单的Shiny测试应用,检查你的JavaScript修改是否正常工作。如果有问题,可以排查编译过程中是否报错,或确认TypeScript代码的修改是否正确对应到了编译后的shiny.js中。
备注:内容来源于stack exchange,提问作者aleksandereiken
相关产品推荐
相关产品推荐

