便捷工具方法
Go to file
CodiceFabbrica 4759dfe6b2 fix(uni-app): 🐛 修复vue3没导出 2026-05-29 20:01:09 +08:00
.changeset feat(all): 新增工具 2026-05-28 11:30:35 +08:00
.claude feat(common): 添加工具 2026-04-20 17:54:26 +08:00
.gitee docs: 📝 配置git规范 2026-03-17 17:36:55 +08:00
.github docs: 📝 配置git规范 2026-03-17 17:36:55 +08:00
.husky feat(): 改为vite 2026-03-16 17:58:57 +08:00
.serena feat(all): 新增工具 2026-05-28 11:30:35 +08:00
.vscode feat(all): 新增工具 2026-05-28 11:30:35 +08:00
docs feat(all): 新增工具 2026-05-28 11:30:35 +08:00
packages fix(uni-app): 🐛 修复vue3没导出 2026-05-29 20:01:09 +08:00
.czrc feat(common): 添加input-rules 2026-03-18 15:52:07 +08:00
.editorconfig ci: 🎡 配置.ps1文件的编码及换行符 2026-03-18 16:41:54 +08:00
.gitattributes ci: 🎡 配置.ps1文件的编码及换行符 2026-03-18 16:41:54 +08:00
.gitignore feat(all): 新增工具 2026-05-28 11:30:35 +08:00
.lintstagedrc.json feat(common): 添加工具 2026-04-20 17:54:26 +08:00
.npmrc fix(uni-app): 🐛 安装类型依赖 2026-05-28 11:54:22 +08:00
.prettierignore feat(): 改为vite 2026-03-16 17:58:57 +08:00
AGENTS.md feat(all): 新增工具 2026-05-28 11:30:35 +08:00
CHANGELOG.md feat(all): 新增工具 2026-05-28 11:30:35 +08:00
CLAUDE.md feat(all): 新增工具 2026-05-28 11:30:35 +08:00
LICENSE Initial commit 2023-04-20 01:26:40 +00:00
README.md fix(uni-app): 🐛 修复vue3没导出 2026-05-29 20:01:09 +08:00
commitlint.config.cjs feat(all): 新增工具 2026-05-28 11:30:35 +08:00
eslint.config.js feat(all): 新增工具 2026-05-28 11:30:35 +08:00
package.json feat(all): 新增工具 2026-05-28 11:30:35 +08:00
pnpm-lock.yaml fix(uni-app): 🐛 安装类型依赖 2026-05-28 11:54:22 +08:00
pnpm-workspace.yaml feat(common): 添加工具 2026-04-20 17:54:26 +08:00
prettier.config.js feat(common): 添加工具 2026-04-20 17:54:26 +08:00
tsconfig.base.json feat(all): 新增工具 2026-05-28 11:30:35 +08:00
tsconfig.eslint.json feat(all): 新增工具 2026-05-28 11:30:35 +08:00
tsconfig.json feat(common): 添加工具 2026-04-20 17:54:26 +08:00
turbo.json feat(all): 新增工具 2026-05-28 11:30:35 +08:00
vitest.config.ts feat(common): 添加工具 2026-04-20 17:54:26 +08:00

README.md

r-utils

前端工具库 monorepo使用 pnpm workspace + Turbo 管理任务Vite 构建。

包列表

包名 路径 描述
@r-utils/common packages/common 通用 JS/TS 工具(权限、倒计时、打印、时间等)
@r-utils/vue3 packages/vue3 Vue3 工具class 处理、dispatch 等)
@r-utils/uni-app packages/uni-app uni-app 工具请求封装、蓝牙、NFC、打印、Vue3 Hooks 等)
@r-utils/uview-plus packages/uview-plus uview-plus 组合式 API HooksPicker、Calendar 等)
@r-utils/vue2 packages/vue2 Vue2 工具visibility 插件)

环境要求

  • Node.js >= 18.12.0
  • pnpm >= 10.0.0

安装依赖

pnpm install

构建

构建所有包

pnpm build

Turbo 会自动按依赖拓扑排序构建(例如 @r-utils/common 会先于依赖它的包构建),并复用缓存加速重复任务。

构建单个包Turbo 过滤)

pnpm build -- --filter=@r-utils/common

构建单个包

cd packages/common
pnpm build

每个包使用 Vite lib 模式构建,输出到 dist/ 目录:

dist/
├── index.mjs       # ESM 格式
├── index.cjs       # CJS 格式
├── index.d.ts      # TypeScript 类型声明
├── index.mjs.map   # Source Map
└── index.cjs.map

监听模式

# 监听所有包
pnpm build:watch

# 仅监听单个包
pnpm build:watch -- --filter=@r-utils/common

使用方式

ESM 引入(推荐)

支持 tree-shaking打包工具会自动按需引入用到的部分。

// 完整引入
import { Permission, Countdown, KnockTest } from '@r-utils/common';

// 按需引入bundler 自动 tree-shaking只打包 Permission
import { Permission } from '@r-utils/common';

// Vue3 工具
import { mergeClass, dispatch } from '@r-utils/vue3';

// uni-app 工具
import { Request } from '@r-utils/uni-app';

// uni-app Vue3 Hooks
import { useShare } from '@r-utils/uni-app/vue3';

// uview-plus Hooks
import { usePickerSingle, usePicker, useCalendar } from '@r-utils/uview-plus';

// Vue2 插件
import { VisibilityPlugin } from '@r-utils/vue2';
Vue.use(VisibilityPlugin);

CJS 引入

const { Permission } = require('@r-utils/common');

package.json exports

每个包均配置了标准的 exports 字段,打包工具会自动选择正确的格式:

{
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.mjs",
      "require": "./dist/index.cjs"
    }
  }
}

开发

测试

# 运行所有测试
pnpm test

# 运行单个测试文件
pnpm vitest run packages/common/test/permission.test.ts

代码检查与格式化

pnpm lint
pnpm format

Git 提交

项目使用 Conventional Commits 规范,通过 commitizen + cz-git 提供交互式提交体验。

# 使用交互式提交(推荐)
pnpm commit

提交时 husky 会自动运行:

  • lint-staged - 代码检查和格式化
  • pnpm testVitest - 单元测试
  • commitlint - 提交信息格式校验

详细说明请参考 提交规范指南

发布

发布流程已提取到独立文档:发布流程

常用命令:

pnpm changeset        # 记录变更
pnpm release:check    # 测试 + 构建
pnpm release          # 更新版本号与 CHANGELOG
pnpm release:publish  # 发布到 npm 仓库
pnpm release:all      # 一键执行检查 + 版本更新 + 发布

项目已配置发布到私有 npm 仓库 http://npm.nps.yunvip123.cn

安装已发布的包

# 配置 npm registry
npm config set registry http://npm.nps.yunvip123.cn

# 或在项目中使用 .npmrc 文件
echo "registry=http://npm.nps.yunvip123.cn" > .npmrc

# 安装包
pnpm add @r-utils/common
pnpm add @r-utils/vue3
pnpm add @r-utils/uni-app
pnpm add @r-utils/uview-plus
pnpm add @r-utils/vue2

项目结构

r-util-js/
├── packages/
│   ├── common/          # @r-utils/common
│   │   ├── src/
│   │   │   ├── permission/   # Permission 权限校验
│   │   │   ├── timer/        # Countdown、TimeoutTimer
│   │   │   ├── printer/      # ESC/TSC 打印指令
│   │   │   ├── knock-test/   # KnockTest 敲击触发
│   │   │   └── time/         # 时间工具
│   │   ├── vite.config.ts
│   │   └── tsconfig.json
│   ├── vue3/            # @r-utils/vue3
│   ├── uni-app/         # @r-utils/uni-app
│   ├── uview-plus/      # @r-utils/uview-plus
│   └── vue2/            # @r-utils/vue2
├── eslint.config.js     # ESLint v9 flat config
├── prettier.config.js
└── pnpm-workspace.yaml

参与贡献

欢迎贡献代码!请先阅读:

基本流程:

  1. Fork 本仓库
  2. 新建分支 feat/xxxfix/xxx
  3. 提交代码(使用 pnpm commit)
  4. 新建 Pull Request