TypeScript Package 模板
TypeScript Package 模板提供轻量的纯 TypeScript 包开发环境,适合开发 HTTP 客户端、storage 适配器、通用 utils、SDK 等不绑定框架的基建模块。如果要开发 Vue SFC 组件,请使用 Component 模板。
技术栈
- TypeScript - 类型安全的包开发体验 (文档)
- tsup - 输出 ESM、CJS、source map 和类型声明 (文档)
- ESBuild - tsup 底层使用的快速转换能力 (文档)
- pnpm workspace - 作为 monorepo 内的 app template 运行
快速开始
创建项目
bash
vup init my-project
cd my-project
vup add my-package
# 选择 Package 模板安装依赖
bash
pnpm install开发
bash
cd apps/my-package
pnpm dev项目结构
txt
apps/my-package/
├── src/
│ ├── http/
│ │ └── index.ts # 基建模块示例
│ └── index.ts # 根入口聚合导出
├── tsup.config.ts # 构建入口和输出配置
├── tsconfig.json # TypeScript 配置
├── package.json # 包元信息和 exports
└── README.md模块约定
- 一个可复用能力一个目录,例如
src/http/、src/socket/、src/storage/。 - 每个模块入口负责导出自己的公开类型和函数。
src/index.ts只做根入口聚合。- 如果要支持子路径引入,需要同步维护
tsup.config.ts的 entry 和package.json的 exports。
引入示例:
typescript
import { http } from 'your-package';
import { HttpClient } from 'your-package/http';构建产物
模板会构建到 .output/:
txt
.output/
├── index.js
├── index.cjs
├── index.d.ts
└── http/
├── index.js
├── index.cjs
└── index.d.tspackage.json 需要显式映射每个公开入口:
json
{
"exports": {
".": {
"types": "./.output/index.d.ts",
"import": "./.output/index.js",
"require": "./.output/index.cjs"
},
"./http": {
"types": "./.output/http/index.d.ts",
"import": "./.output/http/index.js",
"require": "./.output/http/index.cjs"
}
}
}常用脚本
bash
pnpm dev
pnpm type-check
pnpm build
pnpm lint
pnpm format:check发布
发布前确认:
package.json的name、version、exports、运行时依赖正确。pnpm type-check通过。pnpm build生成 ESM、CJS 和.d.ts文件。- 包只暴露稳定的公开入口。
bash
pnpm publish:npm
pnpm publish:beta