build-deploy-tools
Version:
构建部署工具包 - 支持文件复制、SVN操作、系统通知确认等功能
572 lines (437 loc) • 15.8 kB
Markdown
# Build Deploy Tools
[](https://badge.fury.io/js/build-deploy-tools)
[](https://nodejs.org/)
[](https://opensource.org/licenses/MIT)
🚀 **构建部署工具包** - 一个功能强大的 Node.js 工具包,提供文件复制、SVN 操作、系统通知确认等功能,专为自动化构建部署流程设计。
## ✨ 主要特性
- 🔄 **智能重试机制** - 自动处理网络异常和临时错误
- 📢 **跨平台通知** - 支持 Windows、macOS、Linux 系统通知
- 🤖 **自动化模式** - 支持 CI/CD 环境的无人值守操作
- 📁 **文件操作** - 高效的文件复制、删除等操作
- 🔗 **SVN 集成** - 完整的 SVN 更新、提交、删除等操作
- 🧠 **智能提交信息** - 自动从Git/SVN获取最近提交信息,支持自定义格式化
- 📊 **进度提示** - 直观的进度条和状态反馈
- 🛠️ **命令行工具** - 提供便捷的 CLI 命令
- 📝 **详细日志** - 完整的操作日志和错误信息
## 📦 安装
### 全局安装(推荐)
```bash
npm install -g build-deploy-tools
```
### 项目本地安装
```bash
npm install build-deploy-tools --save-dev
```
### 临时使用
```bash
npx build-deploy-tools --help
```
## 🚀 快速开始
### 命令行使用
#### 1. 文件复制工具
```bash
# 交互模式(默认)
build-copy
# 自动模式
build-copy --auto
# 自动模式 + 自动提交 SVN
build-copy --auto --commit
# 自定义构建文件名和目标目录
build-copy --build=myapp --target=D:/Projects/deployment
# 🆕 使用智能提交信息(v1.3.0+)
build-copy --auto --commit # 自动获取Git/SVN最近提交信息
# 🆕 自定义提交信息
build-copy --message="修复登录问题" --commit
# 🆕 格式化提交信息
build-copy --prefix="🚀" --add-timestamp --commit
```
#### 2. 通知功能测试
```bash
# 测试系统通知功能
test-notification
# 自动模式测试
test-notification --auto
```
### 编程方式使用
```javascript
const { BuildDeployTools } = require('build-deploy-tools')
// 创建工具实例
const tools = new BuildDeployTools({
maxRetries: 3,
retryDelay: 2000
})
// 执行构建复制
async function deploy() {
try {
await tools.executeBuildCopy({
sourceDir: './dist',
targetParentDir: 'D:/Projects/deployment',
fileName: 'myapp',
autoCommit: true,
// 🆕 v1.3.0+ 智能提交信息功能
useVcsHistory: true, // 启用版本控制历史
commitMessage: null, // 使用智能获取的信息
commitOptions: {
prefix: '[自动部署]',
addTimestamp: true
}
})
console.log('部署成功!')
} catch (error) {
console.error('部署失败:', error.message)
}
}
```
## 📚 快速配置
### package.json 集成
```json
{
"scripts": {
"build": "vite build",
"deploy": "npm run build && build-copy --auto",
"deploy-commit": "npm run build && build-copy --auto --commit",
"test-notification": "test-notification"
},
"devDependencies": {
"build-deploy-tools": "^1.3.0"
}
}
```
### 使用示例
```bash
# 构建并手动确认部署
npm run deploy
# 自动构建部署并提交
npm run deploy-commit
# 测试通知功能
npm run test-notification
```
## 🔧 构建工具集成
### 方案1:Webpack 集成(推荐)
在 `vue.config.js` 或 `webpack.config.js` 中配置:
```javascript
const { BuildDeployTools } = require('build-deploy-tools')
// 检查是否应该执行部署插件
function shouldExecuteDeployPlugin() {
// 只有包含 'build-copy' 的npm脚本才执行插件
const scriptName = process.env.npm_lifecycle_event || ''
const scriptCommand = process.env.npm_lifecycle_script || ''
console.log(`🔍 当前npm脚本: ${scriptName}`)
console.log(`🔍 脚本命令: ${scriptCommand}`)
// 检查脚本名称或命令中是否包含 build-copy
const shouldExecute = scriptName.includes('build-copy') ||
scriptCommand.includes('build-copy') ||
scriptName.includes('deploy')
console.log(`🔍 是否执行部署插件: ${shouldExecute}`)
return shouldExecute
}
module.exports = {
// ... 其他配置
configureWebpack: {
plugins: [
// 在生产环境下创建自定义插件,在构建完成后执行复制操作
process.env.NODE_ENV === 'production' && shouldExecuteDeployPlugin()
? {
apply: compiler => {
// 使用webpack的done钩子,确保在打包完成后执行
compiler.hooks.done.tapAsync('BuildDeployPlugin', async (stats, callback) => {
try {
console.log('📦 构建完成,开始执行文件复制...')
// 检查构建是否成功
if (stats.hasErrors()) {
console.error('❌ 构建有错误,跳过文件复制')
callback()
return
}
// 执行文件复制操作
const buildDeployTools = new BuildDeployTools({
maxRetries: 3,
retryDelay: 2000,
})
await buildDeployTools.executeBuildCopy({
sourceDir: './dist', // 构建输出目录
targetParentDir: 'D:/Work/Vue3/development',
autoCommit: true, // 根据需要设置
// 🆕 v1.3.0+ 智能提交信息
useVcsHistory: true,
commitOptions: {
prefix: '[Webpack构建]',
addTimestamp: true
}
})
console.log('✅ 文件复制完成')
callback()
} catch (error) {
console.error('❌ 文件复制失败:', error)
callback(error)
}
})
},
}
: null,
].filter(Boolean), // 过滤掉null值
},
}
```
### 方案2:Vite 集成
在 `vite.config.js` 中配置:
```javascript
import { defineConfig } from 'vite'
import { BuildDeployTools } from 'build-deploy-tools'
export default defineConfig({
// ... 其他配置
plugins: [
// ... 其他插件
{
name: 'build-deploy',
closeBundle: async () => {
if (process.env.NODE_ENV === 'production') {
console.log('📦 Vite构建完成,开始执行文件复制...')
const buildDeployTools = new BuildDeployTools()
try {
await buildDeployTools.executeBuildCopy({
sourceDir: './dist',
targetParentDir: 'D:/Work/Vue3/development',
autoCommit: false,
// 🆕 v1.3.0+ 智能提交信息
useVcsHistory: true,
commitOptions: {
prefix: '[Vite构建]'
}
})
console.log('✅ 文件复制完成')
} catch (error) {
console.error('❌ 文件复制失败:', error)
}
}
}
}
]
})
```
### 方案3:Rollup 集成
在 `rollup.config.js` 中配置:
```javascript
import { BuildDeployTools } from 'build-deploy-tools'
export default {
// ... 其他配置
plugins: [
// ... 其他插件
{
name: 'build-deploy',
writeBundle: async () => {
if (process.env.NODE_ENV === 'production') {
console.log('📦 Rollup构建完成,开始执行文件复制...')
const buildDeployTools = new BuildDeployTools()
try {
await buildDeployTools.executeBuildCopy({
sourceDir: './dist',
targetParentDir: 'D:/Work/Vue3/development',
// 🆕 v1.3.0+ 智能提交信息
useVcsHistory: true,
commitOptions: {
prefix: '[Rollup构建]'
}
})
console.log('✅ 文件复制完成')
} catch (error) {
console.error('❌ 文件复制失败:', error)
}
}
}
}
]
}
```
### 方案4:npm scripts 后置钩子
利用 npm 的 `post` 钩子:
```json
{
"scripts": {
"build": "vite build",
"postbuild": "build-copy --auto",
"build:prod": "vite build",
"postbuild:prod": "build-copy --auto --commit"
}
}
```
### 方案5:自定义 Node.js 脚本
创建 `scripts/build-and-deploy.js`:
```javascript
const { execSync } = require('child_process')
const { BuildDeployTools } = require('build-deploy-tools')
async function buildAndDeploy() {
try {
console.log('🚀 开始构建...')
// 执行构建命令
execSync('npm run build', { stdio: 'inherit' })
console.log('📦 构建完成,开始部署...')
// 执行部署
const tools = new BuildDeployTools()
await tools.executeBuildCopy({
sourceDir: './dist',
targetParentDir: 'D:/Work/Vue3/development',
autoCommit: process.env.AUTO_COMMIT === 'true',
// 🆕 v1.3.0+ 智能提交信息
useVcsHistory: true,
commitOptions: {
prefix: '[自动构建]',
addTimestamp: true
}
})
console.log('🎉 构建和部署完成!')
} catch (error) {
console.error('❌ 失败:', error.message)
process.exit(1)
}
}
buildAndDeploy()
```
在 `package.json` 中添加:
```json
{
"scripts": {
"deploy": "node scripts/build-and-deploy.js",
"deploy:auto": "AUTO_COMMIT=true node scripts/build-and-deploy.js"
}
}
```
## ⚙️ 配置选项
### 命令行参数
| 参数 | 说明 | 示例 |
|------|------|------|
| `--auto` | 启用自动模式 | `build-copy --auto` |
| `--commit` | 强制自动提交到 SVN | `build-copy --commit` |
| `--no-commit` | 禁止提交到 SVN | `build-copy --no-commit` |
| `--no-notification` | 禁用系统通知 | `build-copy --no-notification` |
| `--build=<name>` | 指定构建文件名 | `build-copy --build=myapp` |
| `--target=<path>` | 指定目标目录 | `build-copy --target=D:/Projects` |
| 🆕 `--message=<信息>` | 自定义提交信息 | `build-copy --message="修复bug"` |
| 🆕 `--commit-message=<信息>` | 自定义提交信息(别名) | `build-copy --commit-message="版本发布"` |
| 🆕 `--no-vcs-history` | 禁用版本控制历史 | `build-copy --no-vcs-history` |
| 🆕 `--add-timestamp` | 添加时间戳 | `build-copy --add-timestamp` |
| 🆕 `--prefix=<前缀>` | 添加前缀 | `build-copy --prefix="[部署]"` |
| 🆕 `--suffix=<后缀>` | 添加后缀 | `build-copy --suffix="[完成]"` |
### 环境变量
| 变量 | 说明 | 示例 |
|------|------|------|
| `CI=true` | CI 环境自动启用自动模式 | `CI=true build-copy` |
| `npm_config_auto=true` | 启用自动模式 | `npm run build-copy --auto` |
| `npm_config_commit_cli=true` | 启用自动提交 | `npm run build-copy --commit` |
| `npm_config_notification=false` | 禁用通知 | `npm run build-copy --notification=false` |
| `npm_config_build=filename` | 指定构建文件名 | `npm run build-copy --build=myapp` |
## 🧠 智能提交信息功能 (v1.3.0+)
### 🎯 功能特性
**智能提交信息**功能能够自动从当前项目的版本控制系统(Git或SVN)获取最近一次提交信息,作为部署时的提交信息,保持代码变更与部署记录的一致性。
#### 🔧 优先级机制
1. **自定义信息** - 手动指定的提交信息(最高优先级)
2. **Git最近提交** - 从当前Git仓库获取最近一次提交信息
3. **SVN最近提交** - 从当前SVN工作目录获取最近一次提交信息
4. **默认信息** - 使用默认的"更新构建文件"
#### 🎨 格式化选项
- **前缀/后缀** - 为提交信息添加自定义前缀或后缀
- **时间戳** - 自动添加当前时间戳
- **组合使用** - 支持多种格式化选项组合
### 📝 使用示例
```bash
# 基本使用 - 自动获取版本控制提交信息
build-copy --auto --commit
# 自定义提交信息
build-copy --message="紧急修复支付问题" --commit
# 格式化选项
build-copy --prefix="🚀[生产]" --add-timestamp --commit
# 结果:🚀[生产] 修复用户登录验证问题 [2024-01-15 14:30]
# 禁用版本控制历史,仅使用默认信息
build-copy --no-vcs-history --commit
```
### 💻 编程接口
```javascript
await tools.executeBuildCopy({
sourceDir: './dist',
targetParentDir: 'D:/Work/Vue3/development',
autoCommit: true,
// 智能提交信息配置
useVcsHistory: true, // 启用版本控制历史
commitMessage: null, // 使用智能获取的信息
commitOptions: {
prefix: '[自动部署]',
suffix: '[完成]',
addTimestamp: true
}
})
```
详细使用指南请参考:[📖 智能提交信息示例文档](./SMART-COMMIT-EXAMPLES.md)
## 🌍 跨平台支持
本工具支持以下平台:
- ✅ **Windows** (Windows 10/11)
- ✅ **macOS** (macOS 10.14+)
- ✅ **Linux** (Ubuntu, CentOS, 等)
## 📖 详细文档
- [📘 安装指南](./INSTALL.md) - 详细的安装和配置说明
- [🚀 快速开始](./QUICKSTART.zh-cn.md) - 中文快速开始指南
- [📝 更新日志](./CHANGELOG.md) - 版本更新历史
- [⚙️ 配置示例](./example.config.js) - 完整的配置示例
- 🆕 [🧠 智能提交信息示例](./SMART-COMMIT-EXAMPLES.md) - 智能提交信息功能详细指南
## 🛠️ API 文档
### BuildDeployTools 类
#### 构造函数
```javascript
const tools = new BuildDeployTools(options)
```
**选项 (options):**
- `maxRetries` (number): 最大重试次数,默认 3
- `retryDelay` (number): 重试延迟时间(毫秒),默认 2000
- `defaultFileName` (string): 默认文件名,默认 'vam3'
#### 主要方法
##### `executeBuildCopy(config)`
执行完整的构建复制流程
**参数:**
- `config.sourceDir` (string): 源目录路径
- `config.targetParentDir` (string): 目标父目录路径
- `config.fileName` (string, 可选): 构建文件名
- `config.autoCommit` (boolean, 可选): 是否自动提交到 SVN
- 🆕 `config.commitMessage` (string, 可选): 自定义提交信息
- 🆕 `config.useVcsHistory` (boolean, 可选): 是否使用版本控制历史,默认true
- 🆕 `config.commitOptions` (object, 可选): 提交信息格式化选项
- `prefix` (string): 前缀
- `suffix` (string): 后缀
- `addTimestamp` (boolean): 是否添加时间戳
**返回:** `Promise<boolean>`
##### `testNotification()`
测试通知功能
**返回:** `Promise<boolean>`
## 🛠️ 故障排除
### 常见问题
#### 1. 系统通知不显示
**解决方案:**
```bash
# 使用命令行模式
build-copy --no-notification
```
#### 2. SVN 操作失败
**解决方案:**
- 确保目标目录是 SVN 工作副本
- 检查 SVN 权限和网络连接
#### 3. 源目录不存在
**解决方案:**
```bash
# 先执行构建
npm run build
# 再执行部署
npm run deploy
```
## 🤝 贡献指南
欢迎贡献代码!请遵循以下步骤:
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🔗 相关链接
- [npm 包](https://www.npmjs.com/package/build-deploy-tools)
- [问题反馈](https://github.com/your-username/build-deploy-tools/issues)
- [更新日志](CHANGELOG.md)
---
**Build Deploy Tools** - 让构建部署更简单、更可靠! 🚀