# fe-pro-utils **Repository Path**: george_chen/fe-pro-utils ## Basic Information - **Project Name**: fe-pro-utils - **Description**: 一个现代化的 JavaScript/TypeScript 工具库,专为前端开发者设计,提供丰富、高效且类型安全的工具函数。 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-06 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fe-pro-utils ## 介绍 一个现代化的 JavaScript/TypeScript 工具库,专为前端开发者设计,提供丰富、高效且类型安全的工具函数。 fe-pro-utils 遵循 MIT 开源协议发布,支持现代浏览器和 Node.js 运行环境。 ## 特性 - 🚀 **多框架支持**: 与 Vue、React 等主流框架无缝集成 - 📦 **按需引入**: 支持 Tree Shaking,最小化打包体积 - 🛠 **TypeScript**: 完整的类型支持,提供优秀的开发体验 - ✅ **全面测试**: 完整的单元测试覆盖,保证代码质量 - 📖 **详尽文档**: 详细的中文文档和示例,快速上手 - 📝 **自动文档**: 基于 JSDoc 注释自动生成 API 文档,确保文档与代码同步 - 🔄 **模块化设计**: 以命名空间组织功能模块,便于维护和扩展 - 🌐 **跨平台兼容**: 支持浏览器和 Node.js 环境 ## 安装 ### 1. 通过包管理器安装(推荐) ```bash # npm npm install fe-pro-utils # yarn yarn add fe-pro-utils # pnpm pnpm add fe-pro-utils ``` ### 2. 浏览器环境直接引入&全局变量形式使用 ```html ``` ### 3. Node.js 环境引入&使用 ```javascript // 方式一:ESM 环境中引入 import { others } from 'fe-pro-utils'; const status = await others.polling({ runCallback: async () => { const data = await fetchSomeData(); return data.ready ? false : true; } }); console.log('polling status: ', status); // 方式二:CommonJS 环境中引入 const FeProUtils = require('fe-pro-utils'); const status = await FeProUtils.others.polling({ runCallback: async () => { const data = await fetchSomeData(); return data.ready ? false : true; } }); console.log('polling status: ', status); // 模拟异步数据获取方法 async function fetchSomeData () { try { // 模拟异步数据获取 await new Promise(resolve => setTimeout(resolve, 1000)); return { ready: true }; // const response = await fetch('/api/latest-data'); // return await response.json(); } catch (error) { console.error('数据获取失败:', error); return { error: true, ready: false }; } } ``` ## 快速开始 ### 基础使用示例 #### 全量引入使用示例 ```javascript import { others } from 'fe-pro-utils'; const fetchSomeData = async () => { try { // 模拟异步数据获取 await new Promise(resolve => setTimeout(resolve, 1000)); return { ready: true }; // const response = await fetch('/api/latest-data'); // return await response.json(); } catch (error) { console.error('数据获取失败:', error); return { error: true, ready: false }; } }; const status = await others.polling({ runCallback: async () => { const data = await fetchSomeData(); return data.ready ? false : true; } }); console.log('polling status: ', status); ``` #### 按需引入使用示例 ```javascript import { polling } from 'fe-pro-utils/others'; const fetchSomeData = async () => { try { // 模拟异步数据获取 await new Promise(resolve => setTimeout(resolve, 1000)); return { ready: true }; // const response = await fetch('/api/latest-data'); // return await response.json(); } catch (error) { console.error('数据获取失败:', error); return { error: true, ready: false }; } }; const status = await polling({ runCallback: async () => { const data = await fetchSomeData(); return data.ready ? false : true; } }); console.log('polling status: ', status); ``` ### 在框架中使用示例 - [React 18 示例](https://gitee.com/george_chen/fe-pro-utils/blob/master/packages/examples/react-example/src/App.tsx) - [Vue 2 示例](https://gitee.com/george_chen/fe-pro-utils/blob/master/packages/examples/vue2-example/src/App.vue) - [Vue 3 示例](https://gitee.com/george_chen/fe-pro-utils/blob/master/packages/examples/vue3-example/src/App.vue) 为了开发调试方便,框架示例一律使用全量引入的方式,如需使用按需引入,参考"### 基础使用示例 - #### 按需引入使用示例"。 ## 兼容性 fe-pro-utils 支持以下环境: - 现代浏览器:Chrome、Firefox、Safari、Edge (最新版本) - Node.js:18.x 及以上版本 - 构建工具:Webpack、Rollup、Vite 等 ## 开发指南 ### 环境要求 > 推荐使用 Node 版本 18.19.0 或以上,方便后续排查 Node 相关的问题 > 本项目使用 pnpm 进行依赖管理,请确保先安装 pnpm,推荐 pnpm 版本 9.0.0 或以上 > 注意:package.json 中的 engines 字段指定了项目需要的 Node 版本 >= 18.0.0,pnpm 版本 >= 9.0.0,请确保使用兼容的版本 ### 开发步骤 ```bash # 1. 安装 pnpm(如果尚未安装) npm install -g pnpm@9.0.0 # 如果太慢可以加上代理: npm install -g pnpm@9.0.0 --registry=https://registry.npmmirror.com # 查看 pnpm 版本 pnpm -v # 2. 安装依赖 pnpm install # 3. 运行 prepare 指令,安装husky pnpm run prepare # 4. 本地开发 pnpm run dev # 开发服务器会监听文件变化,自动重新构建,并会生成最新的文件到 packages/core/dist 目录 # 5. 编写单元测试用例 packages/core/__tests__ # 运行单测用例 pnpm run test # 6. 构建 # 先删除 packages/core/dist 目录,再执行构建 pnpm run build # 7.1 修改 examples/react-example 项目,引入新增的工具函数并使用 cd packages/examples/react-example # 安装依赖并确保使用本地最新的fe-pro-utils包 # (如有)先删除node_modules,然后重新安装依赖 pnpm install # 运行开发服务器 pnpm run dev # 访问 http://localhost:8081 # 7.2 修改 examples/vue2-example 项目,引入新增的工具函数并使用 cd packages/examples/vue2-example # 安装依赖并确保使用本地最新的fe-pro-utils包 # (如有)先删除node_modules,然后重新安装依赖 pnpm install # 运行开发服务器 pnpm run dev # 访问 http://localhost:8082 # 7.3 修改 examples/vue3-example 项目,引入新增的工具函数并使用 cd packages/examples/vue3-example # 安装依赖并确保使用本地最新的fe-pro-utils包 # (如有)先删除node_modules,然后重新安装依赖 pnpm install # 运行开发服务器 pnpm run dev # 访问 http://localhost:8083 # 8. 生成文档(默认生成所有文档) pnpm run docs:generate # 支持指定文件生成文档(注意:该指令也会更新packages/docs/api/index.md文件,所以最后还需要执行pnpm run docs:generate进行所有文档的生成) pnpm run docs:generate -- packages/core/src/formatter/formatCurrency.ts # 9. 本地预览文档 pnpm run docs:dev # 10. 提交代码(见“贡献指南”) # 11. 版本管理&发布NPM(见“发布NPM”和“版本管理”) ``` ## 发布NPM ### 注意 - 发布前请确保所有变更都已提交到 Git 仓库,并且所有测试都已通过。 ### 操作步骤 - 在命令行界面中,进入到包含您的npm包代码的项目文件夹,并运行以下命令来登录到npm账号: ```bash pnpm login ``` - 输入您的npm账号凭据(用户名、密码和电子邮件),以登录到npm账号。 - 发布您的npm包:在项目根目录下运行以下命令,将您的npm包发布到npm registry: ```bash # 没有指定版本,默认更新修订版本号(patch) pnpm run release ``` - 确认发布:发布成功后,您可以在npm registry上查看并确认您的包已发布。 ## 版本管理 - 本项目使用 [standard-version](https://github.com/conventional-changelog/standard-version) 来管理版本和生成 CHANGELOG.md 文件。standard-version 遵循语义化版本控制(SemVer)规范,采用 x.y.z 格式: - x 表示主版本号(major),当您进行不兼容的 API 变更时,需要增加主版本号。 - y 表示次版本号(minor),当您添加了向下兼容的新功能时,需要增加次版本号。 - z 表示修订版本号(patch),当您进行向下兼容的问题修复时,需要增加修订版本号。 - 每次发布时,会自动更新版本号、生成 CHANGELOG.md 文件并提交到 Git 仓库。 ### 相关命令 ```bash # 更新到大版本 pnpm run release -- --release-as major # 更新到次版本 pnpm run release -- --release-as minor # 更新到修订版本 pnpm run release -- --release-as patch # 也可以指定具体版本号 pnpm run release -- --release-as 1.0.0 ``` ## 目录结构 ```bash fe-pro-utils/ ├── packages/ # 项目主包目录 │ ├── core/ # 核心工具库 │ │ ├── src/ # 工具函数源代码目录 │ │ │ ├── ... # 各工具函数模块目录 │ │ │ └── index.ts # 主入口文件 │ │ ├── __tests__/ # 单元测试 │ │ ├── └── ... │ │ ├── dist/ # 构建输出目录 │ │ └── tsconfig.json # TypeScript配置 │ ├── examples/ # 示例项目目录 │ │ ├── react-example/ # React示例项目 │ │ ├── vue2-example/ # Vue2示例项目 │ │ └── vue3-example/ # Vue3示例项目 │ └── docs/ # 文档网站 │ ├── api/ # API文档 │ ├── .vitepress/ # VitePress配置 │ └── index.md # 文档首页 ├── scripts/ # 构建和文档脚本 ├── .eslintignore # ESLint忽略配置 ├── .eslintrc.cjs # ESLint配置 ├── .gitignore # Git忽略文件 ├── .husky/ # Git钩子配置 ├── .npmrc # npm配置 ├── .prettierignore # Prettier忽略配置 ├── .prettierrc.cjs # Prettier配置 ├── .versionrc.json # standard-version配置 ├── jest.config.js # Jest测试配置 ├── LICENSE # 许可证文件 ├── package.json # 项目配置 ├── pnpm-lock.yaml # pnpm依赖锁文件 ├── tsconfig.json # 根目录TypeScript配置 └── README.md # 项目说明文档 ``` ## 许可证 本项目基于 MIT 许可证开源,你可以在遵守许可证条款的前提下自由使用、修改和分发本项目的代码。 ## 贡献指南 我们非常欢迎社区贡献!如果你想参与项目开发,请按照以下步骤: 1. Fork 本仓库 2. 新建 feat_xxx 分支 3. 提交代码,推送到分支 (`git push origin feat_xxx`) 4. 新建 Pull Request ### 开发规范 - 代码风格:遵循项目的 ESLint 和 Prettier 配置 - 测试要求:为新功能添加单元测试 - 文档要求:更新相关文档和注释 - 提交信息:使用语义化的提交消息格式 ## 联系方式 如有问题或建议,欢迎通过以下方式联系: - Gitee Issues: https://gitee.com/george_chen/fe-pro-utils/issues - Email: chenchaozhibuaa@163.com