后端Web框架前端【免费下载链接】shinyEasy interactive web applications with R项目地址https://gitcode.com/gh_mirrors/sh/shiny点击查看免费下载导读posit/shiny是 Shiny 项目发布的 npm 包专门为 Shiny 客户端 JavaScript 库window.Shiny提供 TypeScript 类型定义让开发者在使用 TypeScript 编写 Shiny 前端扩展时获得完整的类型提示与编译期检查。本文以 README-npm.md 为核心结合 package.json 与 srcts/types 目录中的类型声明源码讲解该包的安装方式、window.Shiny全局类型的正确用法以及 Shiny 仓库自身基于 TypeScript 的构建链路帮助读者既能在自己的项目中用好这套类型定义也能理解其背后的生成机制。一、posit/shiny 是什么posit/shiny是一个仅包含类型声明.d.ts文件的 npm 包定位十分明确它为 Shiny 的客户端 JavaScript 库提供 TypeScript 类型定义它不包含 Shiny 框架本身的运行时代码文档原文注明这一状态未来可能改变是否变化以对应发布版本为准。Shiny 本身是由 Posit PBC 开发的、同时支持 R 和 Python 的 Web 应用框架。本项目仓库shinyR 包的前端源码位于 srcts/src全部以 TypeScript 编写编译产物为 inst/www/shared/shiny.js。类型声明则统一输出到 srcts/types 目录并通过 npm 包的形式分发给前端开发者。从 package.json 的files字段可以看到该包实际只发布了LICENSE与srcts/types/**/*.d.tsfiles: [ LICENSE, srcts/types/**/*.d.ts ]也就是说安装posit/shiny后你拿到的就是一份完整的、与 Shiny 源码同步生成的类型声明集合。包名与元信息{ name: posit/shiny, version: 1.14.0-alpha.9000, license: MIT, types: srcts/types/extras/globalShiny.d.ts, engines: { node: 18, npm: 10 } }值得注意的几个元信息要点types入口指向 srcts/types/extras/globalShiny.d.ts它正是声明全局window.Shiny的入口文件引擎要求 Node.js 18 与 npm 10这是使用该包以及参与源码构建的环境前提该包运行时依赖types/bootstrap、types/jquery、types/selectize、types/datatables.net、types/ion-rangeslider、types/bootstrap-datepicker和lit等用于让类型声明与 Shiny 依赖的第三方库类型对齐。二、安装安装posit/shiny只需一条命令npm install posit/shiny安装完成后TypeScript 编译器会自动解析包入口的globalShiny.d.ts从而在整个项目中获得全局的window.Shiny类型定义。由于该包不包含运行时代码它不影响页面实际加载的shiny.js——运行时你仍需要由 Shiny 应用框架负责注入shiny.js。三、在 TypeScript 中使用 window.Shiny 类型3.1 全局类型入口包的默认类型入口 srcts/types/extras/globalShiny.d.ts 内容如下import type { ShinyClass } from ../src/shiny/index; declare global { interface Window { Shiny: ShinyClass; } }这段声明等价于在全局命名空间为Window接口增加了Shiny: ShinyClass属性。它在 TypeScript 中支持以下两种访问方式window.Shiny—— 推荐写法类型安全且语义明确直接写Shiny—— TypeScript 默认不会把Shiny视为全局变量会因无法解析而报类型错误。3.2 让裸写 Shiny 也通过类型检查如果你希望代码里可以直接写Shiny而不用加window.前缀官方给出的做法是在任意一个 TypeScript 文件中补充如下全局声明declare global { const Shiny: ShinyClass; }这样Shiny就会被识别为全局常量。不过仓库在 srcts/README.md 中明确建议更佳实践是统一使用window.Shiny避免依赖全局变量解析。3.3 加载顺序要求当你的编译产物在浏览器中执行时必须确保它在shiny.js加载之后再加载。在 Shiny 生态中最自然的做法是使用htmlDependency()将你的脚本注册为页面依赖——Shiny 会自动保证依赖在shiny.js之后按序注入。四、ShinyClass 核心类型速览posit/shiny的类型核心是 srcts/types/src/shiny/index.d.ts 中声明的ShinyClass它对应运行时 srcts/src/shiny/index.ts 中真实存在的同名类。以下是常用 API 的类型要点成员类型/签名说明versionstringShiny 客户端版本号inputBindingsBindingRegistryInputBinding输入绑定注册表outputBindingsBindingRegistryOutputBinding输出绑定注册表InputBinding/OutputBinding构造器类型自定义绑定时的基类resetBrushtypeof resetBrush重置图像选框notifications.show/remove函数显示/移除通知modal.show/remove函数显示/移除模态框showReconnectDialog/hideReconnectDialog函数重连对话框控制renderContent/renderContentAsync函数渲染 HTML 内容renderDependencies/renderDependenciesAsync函数渲染 HTML 依赖renderHtml/renderHtmlAsync函数渲染 HTMLaddCustomMessageHandlertypeof addCustomMessageHandler注册自定义消息处理器inDevMode()() boolean是否处于开发模式initialize()() Promisevoid异步初始化initializedPromiseInitStatusPromisevoid初始化完成状态4.1 绑定系统Binding输入/输出绑定的类型定义位于 srcts/types/src/bindings/input/inputBinding.d.ts 与 srcts/types/src/bindings/output/outputBinding.d.ts。InputBinding定义了find、getId、getType、getValue、subscribe、unsubscribe、receiveMessage、getState、getRatePolicy、initialize等方法OutputBinding则包含find、renderValue、onValueChange、onValueError、renderError、clearError、showProgress等。如果你要编写自定义的 Shiny 输入/输出控件这些就是需要实现的接口契约。注册表类型 srcts/types/src/bindings/registry.d.ts 中的BindingRegistryBinding提供register、setPriority、getPriority、getBindings方法与源码中 Shiny 绑定注册的优先级机制一一对应。4.2 输入策略Input Policy从类型上看Shiny 的输入传输经过多层装饰器管道。相关类型位于 srcts/types/src/inputPolicies其中 inputPolicy.d.ts 定义了type EventPriority deferred | event | immediate; type InputPolicyOpts { priority: EventPriority; el?: HTMLElement; binding?: InputBinding; };在运行时 srcts/src/shiny/index.ts 中可以看到实际装饰链InputBatchSender → InputNoResendDecorator → InputEventDecorator → InputRateDecorator / InputDeferDecorator → InputValidateDecorator。页面上存在.shiny-submit-button时使用延迟defer策略否则默认使用速率控制rate策略。类型包对这条链上的setInputValue、forgetLastInputValue等入口都给出了对应签名。4.3 输出与渲染输出进度、消息与错误相关类型位于 srcts/types/src/shiny/shinyapp.d.tsShinyApp类负责与 Shiny Server 的 WebSocket 通信connect、isConnected、reconnect、makeRequest、sendInput等。渲染相关的HtmlDep结构则在 srcts/types/src/shiny/render.d.ts 中定义它描述了 R 端htmlDependency()在客户端的对应形态name、version、stylesheet、script、meta、attachment、head等字段用于支持renderContent/renderDependencies系列函数。五、类型定义是如何生成的源码构建视角srcts/types不是手写的而是由 TypeScript 编译器从 srcts/src 自动生成的声明产物。关键证据在 tsconfig.json{ declaration: true, declarationDir: ./srcts/types, emitDeclarationOnly: true, module: ES2020, target: ES2021, moduleResolution: bundler, strict: true }其中emitDeclarationOnly表示只产出.d.tsdeclarationDir指定输出目录。构建入口由 package.json 的脚本组织# 完整构建先做质量检查再打包 shiny.js npm run build # 类型检查与生成 npm run build_types # tsc -p tsconfig.json # 类型覆盖率检查至少 90% npm run coverage # type-coverage -p tsconfig.json --at-least 90build_types即调用tsc -p tsconfig.json生成全部.d.ts到srcts/typescoverage则用type-coverage校验类型覆盖率不低于 90%保证类型声明质量。构建产物如 inst/www/shared/shiny.js由 srcts/build/shiny.ts 通过 esbuild 打包生成入口为 srcts/src/index.ts并将process.env.SHINY_VERSION在构建期替换为当前 Shiny 版本号见 srcts/build/shiny.ts。5.1 参与源码开发时的环境准备如果要在仓库内参与 Shiny 前端开发srcts/README.md 给出了标准流程与本仓库根目录相对安装 Node.js 与 npm 后在仓库根目录执行npm install安装依赖为保证可复现构建团队统一使用npm ci按 package-lock.json 安装锁定版本日常开发可使用npm run watch监听 srcts/src 变化并即时重建shiny.js一键修复代码风格运行npm run lint基于 eslint 与 prettier。由于 package.json 中的prepack脚本会在发布前临时将 README-npm.md 替换为 npm 包主页的 README发布完成后由postpack恢复因此你在 npm 页面上看到的说明正文正是本文所依托的这份文档。六、常见问题与最佳实践小结安装后没有类型提示确认项目tsconfig.json的types配置没有显式排除全局声明或直接在入口文件import posit/shiny;引入一次即可触发全局类型加载。要不要装到--save-dev该包只含类型、不含运行时安装到devDependencies即可。用window.Shiny还是裸Shiny官方推荐window.Shiny若需裸写请补充declare global { const Shiny: ShinyClass; }。与 Shiny 版本的关系类型声明与仓库源码同步生成若你使用的 Shiny 版本较旧或较新建议选择版本号相近的posit/shiny发布版本避免类型与运行时 API 不一致。参考文件官方包说明README-npm.md包元信息与构建脚本package.json类型定义入口srcts/types/extras/globalShiny.d.ts核心类型ShinyClasssrcts/types/src/shiny/index.d.ts、ShinyAppsrcts/types/src/shiny/shinyapp.d.ts、HtmlDepsrcts/types/src/shiny/render.d.ts运行时实现srcts/src/shiny/index.ts、srcts/src/initialize/index.ts开发者构建指南srcts/README.md赞分享后端Web框架前端【免费下载链接】shinyEasy interactive web applications with R项目地址https://gitcode.com/gh_mirrors/sh/shiny点击查看免费下载相关推荐Shiny 前端 TypeScript 类型定义与构建工具完全指南Shiny 前端 TypeScript 类型定义与构建工具完全指南 本篇指南围绕 Shiny 仓库中的 srcts/README.md https://link后端Web框架前端samtools开发者指南深入源码理解htslib集成和C语言实现原理samtools开发者指南深入源码理解htslib集成和C语言实现原理 samtools是一个基于C语言和htslib库开发的下一代测序数据处理工具集广泛应CANN/cannbot-skills Dequant算子开发知识库Dequant 类算子 AscendC 开发知识库 适用范围在 AscendC 上实现 dequant 类 dequant、dequant activaAI 技能人工智能AI 评测CANNAscend上一篇Laya MLX Snake 工作负载优化实战MLX 编译、16-Token 长度桶与有界前缀缓存下一篇OneDrive Client for Linuxonedrive在 Debian / Ubuntu 系列发行版上通过 OpenSuSE Build Service 仓库安装的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考