从零搭建 Vite 工具库 + VitePress 文档静态站点,完整发布流程
对于使用 npm 包,每个人都不陌生,但是如何发布,尤其是 npm 组织包(Organization Packages)有些同学不太清楚。下面从零开始搭建一个 Vite 的 utils 工具包和文档静态站点。
node -v 查看版本;zhj92,包名为 @zhj92/purchase-utils(组织名不能重复,需自己取名)。# 新建项目文件夹(假设包名叫 my-utils,可自定义)
mkdir my-utils && cd my-utils
# 用vite初始化项目(选择 vanilla-ts 模板,方便写TypeScript类型)
npm create vite@latest . -- --template vanilla-ts
# 安装项目依赖
npm install
# 安装文档生成工具(用vitepress,适合轻量文档)
npm install vitepress -D
# 其他依赖
npm i @types/node path terser esbuild -D
my-utils/
├── src/
│ ├── index.ts # 工具函数入口(对外暴露的方法)
│ └── utils/ # 具体工具函数文件夹
│ ├── format.ts # 比如格式化相关函数
│ └── validate.ts # 比如验证相关函数
├── docs/ # 文档目录(vitepress用)
│ ├── index.md # 文档首页
│ └── guide/ # 使用指南
│ └── usage.md # 函数使用说明
├── package.json # 项目配置(核心)
├── vite.config.ts # vite打包配置
└── tsconfig.json # TypeScript配置
/**
* 格式化时间为 YYYY-MM-DD 格式
* @param date 可选,传入Date对象或时间戳,默认当前时间
* @returns 格式化后的日期字符串
* @example
* formatDate() => "2024-05-20"
* formatDate(new Date(2023, 0, 1)) => "2023-01-01"
*/
export function formatDate(date?: Date | number): string {
const d = date ? new Date(date) : new Date();
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
// 导出所有工具函数(方便用户导入)
export * from './utils/format';
// 未来添加的函数都在这里导出,比如:
// export * from './utils/validate';
import { defineConfig } from "vite";
import path from "path";
export default defineConfig({
build: {
// 打包为库模式
lib: {
entry: path.resolve(__dirname, "src/index.ts"), // 入口文件
name: "myUtils", // 全局变量名(UMD模式用)
fileName: (format) => `my-utils.${format}.js`, // 输出文件名
formats: ["es", "umd"], // 输出两种格式:ES模块和UMD
},
// 压缩代码
minify: "terser",
},
});
{
"name": "@zhj92/purchase-utils",
"version": "0.0.1",
"type": "module",
"main": "./dist/purchase-utils.umd.js",
"module": "./dist/purchase-utils.es.js",
"types": "./dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "tsc && vite build",
"docs:dev": "vitepress dev docs",
"docs:build": "vitepress build docs"
},
"keywords": [
"purchase-utils",
"format",
"tools"
],
"author": "zhanghongjie",
"license": "MIT",
"description": "采购管理智能体的工具函数库",
"devDependencies": {
"@types/node": "^24.9.2",
"path": "^0.12.7",
"terser": "^5.44.0",
"typescript": "~5.9.3",
"vite": "npm:rolldown-vite@7.1.14",
"vitepress": "^1.6.4"
},
"overrides": {
"vite": "npm:rolldown-vite@7.1.14"
}
}
{
"compilerOptions": {
// ...其他默认配置
"declaration": true, // 生成.d.ts类型文件
"outDir": "dist" // 类型文件输出到dist目录
},
"include": ["src"] // 只处理src目录
}
创建 docs/.vitepress/config.ts:
import { defineConfig } from "vitepress";
export default defineConfig({
title: "@zhj92/purchase-utils", // 文档标题
description: "采购管理智能体的工具函数库文档",
themeConfig: {
nav: [{ text: "首页", link: "/" }],
sidebar: {
"/": [{ text: "使用指南", link: "/guide/usage" }],
},
},
});
docs/index.md(首页):
# @zhj92/purchase-utils
采购管理智能体的工具函数库,简化采购管理过程。
## 安装
```bash
npm install @zhj92/purchase-utils
```
## 快速开始
import { formatDate } from '@zhj92/purchase-utils';
console.log(formatDate());
docs/guide/usage.md(函数说明):
# 工具函数列表
## formatDate
格式化时间为 YYYY-MM-DD 格式
### 用法
import { formatDate } from 'my-utils';
// 默认当前时间
console.log(formatDate()); // "2024-05-20"
// 传入Date对象
console.log(formatDate(new Date(2023, 0, 1))); // "2023-01-01"
// 传入时间戳
console.log(formatDate(1672502400000)); // "2023-01-01"
npm run docs:dev
npm login
npm config set registry https://registry.npmjs.org/。按提示输入用户名、密码、邮箱(可能需要验证邮箱)。npm run build
此时会生成 dist 目录,包含打包后的代码和类型声明。
npm publish --access public
https://www.npmjs.com/package/@zhj92/purchase-utils 即可访问(注意替换成你的包名)。