robinson
robinson
a simple web utils building power by edar-cli (skd) Robinson
一个简单的 Web 工具集,采用了现代化的开发工具和流程,包括 TypeScript、ESLint、Jest、Rollup 和 VitePress 等。通过合理的目录结构和配置文件,实现了代码的模块化、测试、文档生成和打包等功能。
downloda https://www.npmjs.com/package/edar-cli
github https://github.com/An-Lijun/Edar-cli
Installation
$ npm i robinson
import {xxx} from 'robinson'
docs
https://an-lijun.github.io/Robinson/
贡献指南
欢迎贡献!请查看 贡献指南 了解如何参与项目开发。
开发者文档
开发者请参考 开发者文档 获取详细的技术指导和最佳实践。
性能测试
项目提供完整的性能测试和报告功能,帮助开发者了解函数性能表现并进行优化。
运行性能测试
# 运行性能测试
npm run test:performance
# 生成性能报告
npm run doc:performanceReport
性能测试内容
性能测试覆盖以下方面:
- 数组操作性能:
isArray、getRelArray、getChunkArray等函数 - DOM 操作性能:
hasClass、getNode、getNodes等函数 - 函数式编程性能:
compose、pipe、debounce、throttle等函数 - 对象操作性能:
isObjectLike、deepClone等函数 - 边界情况测试:空数组、单元素数组、大数组等特殊情况
- 内存使用测试:大对象处理、内存泄漏检测
性能报告
性能测试完成后,会生成详细的 Markdown 报告,包含:
- 测试摘要(总测试数、通过率、平均执行时间)
- 详细测试结果(每个函数的执行时间和性能评级)
- 性能优化建议(针对性能瓶颈的具体建议)
- 性能趋势分析(历史版本性能对比)
报告位置:vitepress/etc/performance-report.md
性能评级标准
- 优秀:执行时间 < 100ms
- 良好:执行时间 100-500ms
- 一般:执行时间 500-1000ms
- 需要优化:执行时间 > 1000ms
自定义性能测试
你可以创建自己的性能测试文件:
const { PerformanceTester } = require('../script/performanceTester');
const { yourFunction } = require('../dist/esm/index.js');
const tester = new PerformanceTester();
// 测试你的函数
tester.testFunction(
'yourFunction - 性能测试',
() => yourFunction(testData),
1000,
'测试你的函数性能'
);
// 生成报告
tester.printSummary();
tester.saveResults('./custom-performance-results.json');
更多详细信息请参考 性能测试使用指南。
Robinson 项目架构文档
1. 项目概述
Robinson 是一个简单的 Web 工具集,由 edar-cli 构建而成。该项目主要提供一些 Web 开发相关的实用功能,目前仅供内部使用。
2. 项目目录结构
Robinson/
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── README.md
├── api-extractor.json
├── babel.config.js
├── jest.config.ts
├── package.json
├── pnpm-lock.yaml
├── rollup.config.js
├── tsconfig.json
├── tsdoc-metadata.json
├── plugin/
│ └── index.js
├── vitepress/
│ ├── .vitepress/
│ ├── assets/
│ ├── docsDist/
│ ├── etc/
│ │ ├── docs/
│ │ │ ├── advance.md
│ │ │ └── quick.md
│ │ └── index.md
│ └── temp/
├── .husky/
│ └── pre-commit
├── .vscode/
│ └── settings.json
├── script/
│ ├── docBuild.js
│ ├── genDoc.js
│ ├── publish.js
│ ├── publish2.js
│ ├── performanceReport.js
│ ├── performanceTester.js
│ └── utils.js
├── src/
│ ├── index.ts
│ └── utils/
└── test/
└── ...
2.1 根目录文件说明
.eslintignore:指定 ESLint 忽略检查的文件和目录。.eslintrc.js:ESLint 的配置文件,用于定义代码检查规则。.gitignore:Git 忽略文件,指定不需要被版本控制的文件和目录。README.md:项目的说明文档,包含项目的基本信息、安装方法、文档链接等。api-extractor.json:API 提取工具的配置文件,用于提取项目中的 API 信息。babel.config.js:Babel 的配置文件,用于进行 JavaScript 代码的转换。jest.config.ts:Jest 测试框架的配置文件,用于配置测试相关的选项。package.json:项目的元数据文件,包含项目的依赖、脚本命令等信息。pnpm-lock.yaml:pnpm 包管理器的锁定文件,记录项目依赖的具体版本信息。rollup.config.js:Rollup 的配置文件,用于进行模块打包。tsconfig.json:TypeScript 的配置文件,用于定义 TypeScript 编译器的选项。tsdoc-metadata.json:TypeScript 文档元数据文件,包含 TypeScript 代码的文档信息。
2.2 文件夹说明
plugin/:插件相关的代码目录,目前只有一个index.js文件。vitepress/:用于构建项目文档的 VitePress 相关目录。.vitepress/:VitePress 的配置目录。assets/:文档相关的静态资源目录。docsDist/:文档构建后的输出目录。etc/:文档源文件目录,包含advance.md和quick.md等文档文件。temp/:临时文件目录。
.husky/:Git Hooks 配置目录,包含pre-commit钩子文件。.vscode/:VSCode 相关的配置目录,包含settings.json文件。script/:项目脚本目录,包含文档构建、发布等相关脚本文件。src/:项目的源代码目录,包含index.ts和utils/目录。test/:项目的测试代码目录。
脚本
{
"doc": "api-extractor run --config ./config/api-extractor.json --local --verbose ",// 不推荐使用 生成函数json
"doc:trace": "api-extractor run --config ./config/api-extractor.json --local --verbose --traceResolution",//不推荐使用 生成函数md文件
"doc:debug": "api-extractor run --local --verbose --diagnostics && api-documenter markdown -i temp -o vitepress/etc/doc", // 不推荐使用 调试使用
"trace": "tsc dist/types/index.d.ts --traceResolution > trace.log", // 不推荐使用 调试使用
"buildViteDocs": "vitepress build vitepress", // 不推荐使用 打包vitepress 应该使用docs:build命令
"oldupdatelog": "node ./script/updatelog.js", //不推荐使用 生成更新日志md命令 应该使用 updatelog
"pub": "node ./script/publish.js", //不推荐使用 旧版本构建发布函数命令
"prepare": "husky install", // git commit钩子
"test": "jest", //测试命令
"lint": "eslint --fix --ext .js,.vue src",//Eslint格式化命令
"commit": "cz", // 提交命令
"build": "npx rollup -c", //打包函数命令
"doc:all": "gulp --gulpfile script/genDoc.js", // 生成全部md文档
"docs:dev": "vitepress dev vitepress", // 开发vitepressDosc使用
"docs:build": "node ./script/docBuild.js", // 打包vitepress
"docs:preview": "vitepress preview", // 预览vitepressDosc使用
"publishRobinson": "node ./script/publish.js", //构建发布函数命令
"genEtc": "api-documenter markdown -i vitepress/temp -o vitepress/etc/doc", //生成函数md文件
"genUpdatelog": "gulp --gulpfile script/getUpdateLog.js", //生成更新日志md命令
"genReport" :"gulp --gulpfile script/report.js", //生成测试报告
"test:performance": "node test/performance.test.js", // 运行性能测试
"doc:performanceReport": "gulp --gulpfile script/performanceReport.js" // 生成性能报告
}
生成文档
项目提供了文档生成的功能,通过以下命令可以生成文档:
npm run doc:all
npm run docs:build
测试
项目使用 Jest 作为测试框架,通过以下命令可以运行测试:
npm run test
3.3 TsType 注释规范
项目中使用了一些自定义的 TsType 注解,包括 @bata、@description、@param、@returns 和 @example,用于对函数进行描述和注释。
项目代码中使用了特定的注释规范,用于描述函数的相关信息,如:
`@bata`:表示是否为正式版。
`@description`:函数描述。
`@param`:参数说明。
`@returns`:返回值说明。
`@example`:使用示例。
4. 依赖管理
项目使用 pnpm 作为包管理器,pnpm-lock.yaml 文件记录了项目依赖的具体版本信息。主要的依赖包括:
- 开发依赖:ESLint、Babel、Jest、Rollup 等。
- 运行时依赖:一些 Web 开发相关的工具库。
5. 构建与打包
项目使用 Rollup 进行模块打包,通过 rollup.config.js 进行配置。在 package.json 中可以定义打包脚本,例如:
{
"scripts": {
"build": "rollup --config"
}
}
6. 文档编写与展示
项目使用 VitePress 进行文档编写和展示,文档源文件位于 vitepress/etc/docs/src/ 目录下,包括 advance.md 和 quick.md 等文件。通过 VitePress 可以将这些 Markdown 文件构建成静态网站。
短期优化(1-2周)
- 完善 renderTmp 函数 :支持更复杂的模板语法
- 增加更多类型定义 :减少 any 类型的使用
- 优化文档注释 :统一格式和风格
中期优化(1-2个月)
- 增加高级功能 :深度比较、数据验证等
- 性能监控 :添加性能测试和基准测试
- 错误处理 :统一错误处理机制
长期优化(3-6个月)
- 功能扩展 :添加网络请求、状态管理等高级功能
- 生态建设 :提供更多插件和扩展
- 社区建设 :增加贡献指南和开发者文档
总结
结合Ai
// 方法 1:直接读取 JSON 文件 const manifest = require('robinson/dist/ai/manifest.json');
// 方法 2:使用动态导入(ESM) import manifest from 'robinson/dist/ai/manifest.json';
const { OpenAI } = require('openai'); const tools = require('robinson/dist/ai/openai-tools.json');
const openai = new OpenAI({ apiKey: 'your-api-key' });
async function runWithAI(userQuery) { const response = await openai.chat.completions.create({ model: 'gpt-4', messages: [{ role: 'user', content: userQuery }], tools: tools, tool_choice: 'auto' });
// 处理 AI 响应和工具调用 }