shadcn-vue 纯 JavaScript 使用指南:通过 components.json 关闭 TypeScript 的完整配置
UI组件前端【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址https://gitcode.com/gh_mirrors/sh/shadcn-vue点击查看免费下载本指南讲解如何在 shadcn-vue 项目中完全脱离 TypeScript、以纯 JavaScript 方式使用官方组件。shadcn-vue 的源码与全部组件默认以 TypeScript 编写但官方 CLI 提供了完整的 JavaScript 支持路径只需在components.json中将typescript置为falseCLI 便会自动把组件源码中的类型注解剔除、将.ts文件改写为.js。读完本文你将掌握纯 JS 项目的初始化方式、components.json与jsconfig.json的完整配置方法以及 CLI 底层去类型化detype的实现原理。项目背景TypeScript 是一等公民但 JavaScript 受官方支持shadcn-vue 是 shadcn-ui 的 Vue 移植版见 README.md其文档站点、组件仓库以及 CLI 工具链均以 TypeScript 编写。例如本仓库中 apps/v4/registry 下的新样式组件、reka-*系列 456 个组件文件全部是.vue.ts组合。官方立场很明确推荐你使用 TypeScript理由包括类型安全、IDE 自动补全以及与组件源码形态一致。但项目同样为 JavaScript 用户保留了官方通道——JavaScript 版本的组件通过 CLI使用说明见 apps/v4/content/docs/06.cli.md 提供。CLI 在安装组件时读取你的components.json若检测到typescript: false就会对拉取到的组件源码执行去类型化转换产出可直接运行的.js组件。第一步在 components.json 中关闭 TypeScript核心配置只有一个字段typescript。在项目根目录的components.json中将其设置为false即可显式选择 JavaScript 输出{ style: default, tailwind: { config: tailwind.config.js, css: src/app/globals.css, baseColor: zinc, cssVariables: true }, typescript: false, aliases: { utils: ~/lib/utils, components: ~/components } }关于该字段的几点权威说明均可在仓库源码中找到直接证据默认值是trueCLI 的配置校验 schema 中写明了typescript: z.coerce.boolean().default(true)见 packages/cli/src/registry/schema.ts即不显式声明时按 TypeScript 项目处理这符合官方推荐 TypeScript的立场。初始化时会被询问执行init命令时CLI 会弹出交互式开关Would you like to use TypeScript (recommended)?默认选中 yes见 packages/cli/src/commands/init.ts并最终把用户的选择写入rawConfigSchema.parse(...)的typescript字段packages/cli/src/commands/init.ts。schema 的其他字段保持通用style、tailwind.config、tailwind.css、tailwind.baseColor、tailwind.cssVariables以及aliases均与 TypeScript 项目完全一致切换语言不会影响这些配置的语义完整字段定义见 packages/cli/src/registry/schema.ts。style字段在本仓库中取值如default、new-york、new-york-v4以及reka-nova、reka-vega等见 packages/cli/src/commands/init.ts 的选择项无论哪种视觉风格JavaScript 模式都同样适用。第二步配置 jsconfig.json 完成导入别名components.json里的aliases是模块导入别名但要让编辑器VSCode 等与打包工具正确解析这些别名纯 JavaScript 项目需要提供对应的路径映射配置。TypeScript 项目使用tsconfig.json的compilerOptions.paths而 JS 项目对应的文件是jsconfig.json语法同源{ compilerOptions: { paths: { /*: [./*] } } }这段配置的作用是把/开头的导入映射到项目根目录例如import { cn } from /lib/utils。它与components.json中aliases.utils: ~/lib/utils、aliases.components: ~/components配合使用。CLI 在解析别名时对jsconfig.json有专门的逻辑支持证据如下在 packages/cli/src/utils/get-config.ts 中解析配置路径时会根据项目是否使用 TypeScript 选择读取tsconfig.json还是jsconfig.jsongetTsconfig(tsConfigPath, isTypeScript ? undefined : jsconfig.json)。在 packages/cli/src/utils/get-project-info.ts 中isTypeScriptProject()通过扫描目录下是否存在tsconfig.*文件来判断语言若无则被认定为 JS 项目。同一个文件的 getFrameworkTsConfigPath() 在非 TypeScript 项目下会直接返回./jsconfig.json作为路径映射来源。因此纯 JS 项目的标准配置组合是components.json中typescript: false 项目根目录的jsconfig.json提供paths映射两者缺一不可。若使用 Nuxt 框架其自动生成的jsconfig.json同样适用Nuxt 会自行生成该文件无需手动维护。第三步CLI 如何把 TypeScript 组件变成 JavaScript理解底层转换机制有助于排查 JS 模式下的异常。CLI 对组件文件的去类型化发生在两个层面1. 文件扩展名改写.ts → .js在 packages/cli/src/utils/updaters/update-files.ts 中当config.typescript为假时CLI 会把待写入文件的扩展名从.ts替换为.jsif (!config.typescript) { filePath filePath.replace(/\.ts?$/, match .js) }这意味着utils.ts会以utils.js落盘组件目录下的辅助脚本同样如此而.vue单文件组件不受影响其内部script langts的处理见下。2. 单文件组件内容转换借助 unovue/detypes 剔除类型对.vue单文件组件转换逻辑位于 packages/cli/src/utils/transformers/transform-sfc.tsexport async function transformSFC(opts: TransformOpts) { if (opts.config?.typescript) return opts.raw return await transformByDetype(opts.raw, opts.filename).then(res res as string) } export async function transformByDetype(content: string, filename: string) { return await transform(content, filename, { removeTsComments: true, prettierOptions: { proseWrap: never, }, }) }要点解读typescript: true时原样返回组件源码不做任何改写这正是推荐 TypeScript在实现层面的体现。typescript: false时调用unovue/detypes该工具会解析 SFC 中的script langts剥离类型注解、接口、泛型与类型导入同时removeTsComments: true会移除仅用于类型层面的注释proseWrap: never则保证转换过程中不破坏原有代码换行结构。转换是纯文本级的不会改变组件的 props 默认值、事件逻辑等运行时行为因此 JS 模式下组件的 API 与 TS 模式完全一致。整体调用链为CLI 安装组件 → 读取 registry 文件 →transformSFC依据components.json.typescript决定是否 detype→ 扩展名改写 → 写入项目。相关转换器统一注册在 packages/cli/src/utils/transformers/index.ts同一管线中的transform-import.ts、transform-css-vars.ts等转换器在 JS 模式下照常生效。常见问题与注意事项components.json 不写 typescript 会怎样会按true处理schema 默认值CLI 不会产出.js文件。若要使用 JS必须显式写typescript: false。jsconfig.json 可以省略吗在init初始化时 CLI 会引导填写别名若省略jsconfig.json的paths编辑器无法解析/或~/别名导入会报错建议始终配置。Nuxt 用户Nuxt 3/4 会自动生成.nuxt/tsconfig.json或jsconfig.jsonCLI 会优先读取框架生成的配置来解析别名见 getFrameworkTsConfigPath()无需手动维护路径映射。别名前缀并不强制为components.json中aliases的键值可以自定义如~/只需与jsconfig.json的paths一一对应即可。CLI 在 resolveConfigPaths() 中会通过resolveImport()依据路径映射把别名解析为绝对路径。运行时表现由于转换只剥离类型、不改业务逻辑TS 与 JS 模式产出的组件在浏览器中的行为一致差异仅在于 JS 模式失去了静态类型检查与编辑器类型提示。总结使用纯 JavaScript 接入 shadcn-vue 只需要三件事在components.json中显式声明typescript: false、提供jsconfig.json的paths路径映射、然后照常通过 CLI 安装组件。CLI 会在安装时自动完成.ts扩展名改写与 SFC 内部类型剥离全程无需手动改写组件代码。虽然官方推荐 TypeScript但 JavaScript 通道是官方一等支持的能力其实现细节schema 默认值、jsconfig 读取、detype 转换器都封装在packages/cli/src中可随时查阅源码验证行为。赞分享UI组件前端【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址https://gitcode.com/gh_mirrors/sh/shadcn-vue点击查看免费下载相关推荐shadcn-svelte 使用 JavaScript关闭 TypeScript 的 components.json 配置与 CLI 类型剥离机制全解shadcn svelte 使用 JavaScript关闭 TypeScript 的 components.json 配置与 CLI 类型剥离机制全解 shaUI组件前端CLI开发工具shadcn-svelte 的 components.json 配置完全指南从初始化到源码级解析shadcn svelte 的 components.json 配置完全指南从初始化到源码级解析 components.json 是 shadcn sveltUI组件前端CLI开发工具在 Vite 项目中安装配置 shadcn-svelte从 Tailwind CSS、TS 路径别名到 components.json 的完整指南在 Vite 项目中安装配置 shadcn svelte从 Tailwind CSS、TS 路径别名到 components.json 的完整指南 本篇指南面UI组件前端CLI开发工具上一篇DCVC-RT实现实时神经视频压缩的终极指南下一篇LangFlow革命重新定义自然语言处理的智能工作流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

预测:2026-2032年自主SOC将以6.3%年复合增长率发展

预测:2026-2032年自主SOC将以6.3%年复合增长率发展

自主SOC是一种高度自动化的智能安全运营中心,它深度融合人工智能、机器学习和安全编排自动化技术,能够独立执行全链路威胁检测、海量警报智能分类、攻击情境自动丰富、风险优先级精准排序、深度根因调查甚至闭环自动响应等核心安全任务,从而大…

2026/9/24 15:15:30 阅读更多 →
Akka Typed Mailboxes 完全指南:消息邮箱的选型、配置与自定义实现

Akka Typed Mailboxes 完全指南:消息邮箱的选型、配置与自定义实现

Akka Typed Mailboxes 完全指南:消息邮箱的选型、配置与自定义实现 【免费下载链接】akka-core A platform to build and run apps that are elastic, agile, and resilient. SDK, libraries, and hosted environments. 项目地址: https://gitcode.com/gh_mirrors…

2026/9/24 15:15:30 阅读更多 →
交通运输物流管理小程序开发案例

交通运输物流管理小程序开发案例

根据某公司的交通运输仓储物流管理需求,海拔网络完成了一套物流运输管理小程序的定制开发。系统按照老板、派单人员和司机三种使用角色划分功能,将送货任务录入、车辆选择、司机数据填报、任务状态确认及经营数据查看集中到同一套系统中。该项目不是面向…

2026/9/24 15:15:30 阅读更多 →

最新新闻

基于图像识别的跨平台 UI 自动化框架:Airtest 安装、Python API 与 CLI 实战指南

基于图像识别的跨平台 UI 自动化框架:Airtest 安装、Python API 与 CLI 实战指南

测试质量保障计算机视觉 【免费下载链接】Airtest UI Automation Framework for Games and Apps 项目地址: https://gitcode.com/gh_mirrors/ai/Airtest 点击查看 免费下载 Airtest 是网易开源的跨平台 UI 自动化框架,专为游戏和 App 设计,核…

2026/9/24 15:57:07 阅读更多 →
Docker之镜像、容器、数据卷关系

Docker之镜像、容器、数据卷关系

Docker之镜像、容器、数据卷关系一个 Image(镜像)可以创建多个 Container(容器);Container 挂载 Volume(数据卷)后,数据可以在删除旧容器、创建新容器后继续使用。概念含义类比Image…

2026/9/24 15:57:07 阅读更多 →
LX Music 桌面版免费多源音乐搜索下载完整指南

LX Music 桌面版免费多源音乐搜索下载完整指南

LX Music 桌面版免费多源音乐搜索下载完整指南 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 凌晨一点,想找一首歌的完整版,你翻遍了三个音乐 App&#x…

2026/9/24 15:57:07 阅读更多 →
Humanizer ByteSizeExtensions 完全指南:.NET 字节与位单位转换、人性化格式化与速率计算的扩展方法全景

Humanizer ByteSizeExtensions 完全指南:.NET 字节与位单位转换、人性化格式化与速率计算的扩展方法全景

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 本篇技…

2026/9/24 15:57:07 阅读更多 →
ParlAI 对话安全实战:基于 Build it Break it Fix it 对抗式训练的冒犯语言检测

ParlAI 对话安全实战:基于 Build it Break it Fix it 对抗式训练的冒犯语言检测

ParlAI 对话安全实战:基于 Build it Break it Fix it 对抗式训练的冒犯语言检测 【免费下载链接】ParlAI A framework for training and evaluating AI models on a variety of openly available dialogue datasets. 项目地址: https://gitcode.com/gh_mirrors/pa…

2026/9/24 15:57:07 阅读更多 →
Python新闻网站项目-4.数据处理和算法应用

Python新闻网站项目-4.数据处理和算法应用

基于Python、Scrapy、Gerapy、NLP以及Django框架构建的新闻采集与展示系统,旨在实现自动化新闻抓取、处理、展示和管理的一体化解决方案。本项目结合了爬虫技术、分布式部署、数据处理、前后端展示以及内容管理系统的构建,最终形成一个功能全面、用户友好的新闻网站。该系统不…

2026/9/24 15:56:06 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →