You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:03:10