# luckdog
**Repository Path**: liushuku/luckdog
## Basic Information
- **Project Name**: luckdog
- **Description**: npm 工具包 luckdog~
- **Primary Language**: JavaScript
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 0
- **Created**: 2025-04-13
- **Last Updated**: 2025-04-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LuckDog 工具库
一个现代化的JavaScript/TypeScript实用工具库
## 特性
- 📦 使用Rollup打包,同时支持ESM和CommonJS
- 🔑 完整的TypeScript类型定义
- 🧪 Jest单元测试保障
- 📝 详细的API文档
- 🔍 支持Tree-shaking,按需导入
## 安装
```bash
# 使用npm
npm install luckdog
# 使用yarn
yarn add luckdog
# 使用pnpm
pnpm add luckdog
```
## 使用方法
LuckDog 支持多种使用方式,可以在不同的环境中使用:
### 在 Node.js 中使用
#### ESM 方式 (推荐)
```javascript
// 方式1: 导入特定工具命名空间
import { strUtil, arrUtil, validUtil } from 'luckdog';
// 通过命名空间调用相应工具函数
const shortText = strUtil.truncate('这是一个很长的文本', 5);
const uniqueArray = arrUtil.unique([1, 2, 2, 3]);
const isValidMail = validUtil.isValidEmail('example@domain.com');
// 方式2: 导入全部工具
import * as LuckDog from 'luckdog';
const shortText = LuckDog.strUtil.truncate('这是一个很长的文本', 5);
```
#### CommonJS 方式
```javascript
// 方式1: 导入特定工具命名空间
const { strUtil, arrUtil, validUtil } = require('luckdog');
// 通过命名空间调用相应工具函数
const shortText = strUtil.truncate('这是一个很长的文本', 5);
const uniqueArray = arrUtil.unique([1, 2, 2, 3]);
const isValidMail = validUtil.isValidEmail('example@domain.com');
// 方式2: 导入全部工具
const LuckDog = require('luckdog');
const shortText = LuckDog.strUtil.truncate('这是一个很长的文本', 5);
```
### 在浏览器中使用
#### 使用 ES Modules (推荐)
```html
```
#### 使用 UMD 方式 (通过 CDN)
```html
```
### 在 Vue 项目中使用
```javascript
// 在组件中
```
### 在小程序中使用
首先安装:
```bash
# 进入小程序项目目录
cd your-miniprogram
# 安装依赖
npm install luckdog
```
在构建npm后,可以直接在小程序中使用:
```javascript
// 在页面或组件的 js 文件中
import { strUtil, arrUtil } from 'luckdog';
Page({
data: {
shortText: ''
},
onLoad() {
this.setData({
shortText: strUtil.truncate('这是一个很长的文本', 10)
});
}
})
```
### 在 React 项目中使用
```jsx
import React, { useState, useEffect } from 'react';
import { strUtil, validUtil } from 'luckdog';
function ExampleComponent() {
const [shortText, setShortText] = useState('');
useEffect(() => {
setShortText(strUtil.truncate('这是一个很长的文本,需要被截断', 10));
}, []);
return (
);
}
```
## 功能分类
LuckDog工具库将工具函数按功能分为三大类:
### 字符串工具 (String)
```javascript
import { strUtil } from 'luckdog';
// 使用strUtil命名空间调用,避免命名冲突
strUtil.truncate('这是一个很长的字符串', 4); // '这是一个...'
strUtil.hasBlank(''); // true
strUtil.hasBlank('hello', null, ''); // true
strUtil.hasBlank('hello', 'world'); // false
```
- `strUtil.hasBlank(...strs)`: 判断字符串是否为空白
- `strUtil.truncate(str, maxLength, suffix)`: 截断字符串到指定长度
- `strUtil.capitalize(str)`: 首字母大写
- `strUtil.camelToKebab(str)`: 驼峰命名转连字符命名
- `strUtil.kebabToCamel(str)`: 连字符命名转驼峰命名
- `strUtil.escapeHtml(html)`: 转义HTML特殊字符
### 数组工具 (Array)
```javascript
import { arrUtil } from 'luckdog';
// 使用arrUtil命名空间调用,避免命名冲突
arrUtil.unique([1, 2, 2, 3]); // [1, 2, 3]
arrUtil.groupBy([{age: 20}, {age: 30}, {age: 20}], item => item.age);
// {20: [{age: 20}, {age: 20}], 30: [{age: 30}]}
```
- `arrUtil.unique(arr)`: 数组去重
- `arrUtil.groupBy(arr, keySelector)`: 数组分组
- `arrUtil.flatten(arr)`: 数组扁平化(一维化)
- `arrUtil.random(arr)`: 获取数组中的随机元素
- `arrUtil.shuffle(arr)`: 数组洗牌(随机排序)
### 验证工具 (Validation)
```javascript
import { validUtil } from 'luckdog';
// 使用validUtil命名空间调用,避免命名冲突
validUtil.isEmpty(''); // true
validUtil.isValidEmail('test@example.com'); // true
validUtil.isValidMobile('13800138000'); // true
```
- `validUtil.isEmpty(value)`: 判断是否为空值
- `validUtil.isValidEmail(email)`: 验证邮箱格式
- `validUtil.isValidMobile(mobile)`: 验证手机号格式(中国大陆)
- `validUtil.isValidUrl(url)`: 验证URL格式
- `validUtil.isValidIDCard(idCard)`: 验证身份证号(中国大陆18位)
## 项目结构
```
luckdog/
├── config/ # 配置文件目录
│ ├── .eslintrc.json # ESLint配置
│ ├── .prettierrc # Prettier配置
│ ├── jest.config.mjs # Jest测试配置
│ ├── rollup.config.mjs # Rollup打包配置
│ └── tsconfig.json # TypeScript配置
├── dist/ # 构建输出目录
├── examples/ # 示例代码目录
│ └── quickstart.mjs # 快速入门示例
├── luckdog.bat # 工具箱主菜单脚本
├── src/ # 源代码目录
├── test/ # 测试目录
├── CHANGELOG.md # 版本更新日志
├── CODE_OF_CONDUCT.md # 行为准则
├── CONTRIBUTING.md # 贡献指南
├── LICENSE # 许可证文件
├── NPM_PUBLISH_GUIDE.md # NPM发布指南
├── package.json # 项目配置
└── tsconfig.json # TypeScript配置
```
## 开发
### 通用命令 (适用于所有操作系统)
```bash
# 安装依赖
npm install
# 开发模式(监听文件变化)
npm run dev
# 构建生产版本
npm run build
# 运行测试
npm test
# 生成测试覆盖率报告
npm run test:coverage
# 生成测试覆盖率报告并更新README
npm run test:update-readme
# 代码检查
npm run lint
# 代码格式化
npm run format
```
### Windows用户工具库管理系统
为方便Windows用户使用,我们提供了一个综合管理菜单系统:
只需双击根目录下的 `luckdog.bat` 文件,即可打开管理菜单,包含以下功能:
1. **构建相关**
- 构建项目
- 开发模式(监听文件变化)
2. **测试相关**
- 运行测试
- 生成测试覆盖率报告
- 生成测试覆盖率并自动更新README
3. **发布相关**
- 增加版本号并发布到NPM
- 直接发布到NPM(不变更版本号)
4. **Git相关**
- 提交并推送变更
- 创建并推送版本标签
系统实现结构:
- 根目录 `luckdog.bat`: 入口文件
- `scripts/menu.bat`: 主菜单
- `scripts/build/`: 构建相关脚本
- `scripts/test/`: 测试相关脚本
- `scripts/npm/`: 发布相关脚本
- `scripts/git/`: Git相关脚本
通过这种模块化的方式,所有功能都被拆分到不同模块中,便于维护和扩展。
## 示例
可以在`examples`目录下找到使用示例:
- `quickstart.js`: 演示了基本的使用方法
运行示例(需要先构建项目):
```bash
# 先构建项目
npm run build
# 然后运行示例
node examples/quickstart.js
```
## 发布与贡献
### NPM发布
我们已经为您准备了多种方式发布LuckDog至NPM:
1. 使用工具库管理系统(推荐):
```bash
# Windows环境下双击,打开菜单系统
luckdog.bat
# 然后选择选项5来增加版本号并发布
# 或选择选项6直接发布(不增加版本号)
```
2. 使用命令行方式:
```bash
# 选择版本号类型
npm run release:major # 增加主版本号 (x.0.0)
npm run release:minor # 增加次版本号 (x.y.0)
npm run release:patch # 增加补丁版本号 (x.y.z)
# 直接使用脚本,传入版本类型参数
node scripts/npm/publish.js major # 增加主版本号 (x.0.0)
node scripts/npm/publish.js minor # 增加次版本号 (x.y.0)
node scripts/npm/publish.js patch # 增加补丁版本号 (x.y.z)
```
版本号规则 (遵循语义化版本):
- **主版本号(x.0.0)**: 不兼容的API变更
- **次版本号(x.y.0)**: 向下兼容的功能性新增
- **补丁版本号(x.y.z)**: 向下兼容的问题修正
脚本会自动执行测试、更新版本号、构建项目并发布。
3. 手动发布:
```bash
# 安装依赖
npm install
# 运行测试
npm test
# 构建项目
npm run build
# 发布到NPM
npm publish
```
### Git操作
使用工具库管理系统可以轻松管理代码变更:
1. 提交并推送变更:
- 运行 `luckdog.bat` 并选择选项7
- 输入提交信息
2. 为当前版本创建标签:
- 运行 `luckdog.bat` 并选择选项8
- 确认创建标签
详细的发布指南请参阅 [NPM_PUBLISH_GUIDE.md](./NPM_PUBLISH_GUIDE.md)。
### 贡献代码
我们欢迎您为LuckDog贡献代码,请参考 [CONTRIBUTING.md](./CONTRIBUTING.md) 了解详情。
## 许可证
本项目采用 [MIT 许可证](./LICENSE)。
## 测试覆盖率
```
--------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
--------------|---------|----------|---------|---------|-------------------
All files | 98.94 | 98.14 | 100 | 98.57 |
arrutil.ts | 100 | 100 | 100 | 100 |
strutil.ts | 100 | 100 | 100 | 100 |
validutil.ts | 97.67 | 95.65 | 100 | 96.96 | 80
--------------|---------|----------|---------|---------|-------------------
```
- **测试用例总数**: 48
- **测试套件数**: 3
- **覆盖率统计**:
- 语句覆盖率: 98.94%
- 分支覆盖率: 98.14%
- 函数覆盖率: 100%
- 行覆盖率: 98.57%