import { series, parallel } from 'gulp'; import { GulpBuildTools, createBuildTools, CompressConfig } from '../src/index.js'; /** * 多压缩任务示例 * 展示如何使用 Gulp Build Tools 进行多个文件的并行和串行压缩 */ // 创建构建工具实例 const buildTools = createBuildTools({ cwd: process.cwd(), verbose: true, tempDir: './temp' }); /** * 示例 1: 串行多压缩任务 * 按顺序依次压缩多个文件包 */ const serialMultiCompressConfigs: CompressConfig[] = [ { src: ['src/**/*.ts'], filename: 'source-code.zip', dest: './dist/archives', type: 'zip', level: 6 }, { src: ['docs/**/*.md'], filename: 'documentation.tar.gz', dest: './dist/archives', type: 'gzip', level: 9 }, { src: ['assets/**/*'], filename: 'assets-bundle.zip', dest: './dist/archives', type: 'zip', level: 4 } ]; export const serialMultiCompress = buildTools.multiCompress(serialMultiCompressConfigs, false); /** * 示例 2: 并行多压缩任务 * 同时压缩多个文件包,提高效率 */ const parallelMultiCompressConfigs: CompressConfig[] = [ { src: ['build/**/*.js', 'build/**/*.css'], filename: 'production-assets.zip', dest: './releases', type: 'zip', level: 9 }, { src: ['tests/**/*.spec.ts'], filename: 'test-files.tar', dest: './backups', type: 'tar' }, { src: ['config/**/*.json', 'config/**/*.yaml'], filename: 'configurations.zip', dest: './backups', type: 'zip', level: 6 } ]; export const parallelMultiCompress = buildTools.multiCompress(parallelMultiCompressConfigs, true); /** * 示例 3: 多环境部署包压缩 * 为不同环境创建对应的部署包 */ const environmentPackages: CompressConfig[] = [ { src: ['dist/dev/**/*'], filename: 'app-dev-v1.0.0.zip', dest: './releases/dev', type: 'zip', level: 6 }, { src: ['dist/staging/**/*'], filename: 'app-staging-v1.0.0.zip', dest: './releases/staging', type: 'zip', level: 6 }, { src: ['dist/production/**/*'], filename: 'app-production-v1.0.0.zip', dest: './releases/production', type: 'zip', level: 9 } ]; export const multiEnvironmentCompress = buildTools.multiCompress(environmentPackages, true); /** * 示例 4: Monorepo 模块压缩 * 为 Monorepo 中的每个模块单独打包 */ const monorepoPackages: CompressConfig[] = [ { src: ['packages/ui-components/dist/**/*'], filename: 'ui-components-v2.1.0.zip', dest: './releases/packages', type: 'zip', level: 8 }, { src: ['packages/utils/dist/**/*'], filename: 'utils-v1.5.2.zip', dest: './releases/packages', type: 'zip', level: 8 }, { src: ['packages/api-client/dist/**/*'], filename: 'api-client-v3.0.1.zip', dest: './releases/packages', type: 'zip', level: 8 }, { src: ['apps/web-app/dist/**/*'], filename: 'web-app-v1.0.0.tar.gz', dest: './releases/apps', type: 'gzip', level: 9 } ]; export const monorepoMultiCompress = buildTools.multiCompress(monorepoPackages, false); /** * 示例 5: 备份归档系统 * 创建不同类型的备份文件 */ const backupConfigs: CompressConfig[] = [ { src: ['src/**/*.ts', 'src/**/*.js'], filename: `source-backup-${new Date().toISOString().slice(0, 10)}.zip`, dest: './backups/daily', type: 'zip', level: 9 }, { src: ['database/**/*.sql'], filename: `database-backup-${new Date().toISOString().slice(0, 10)}.tar.gz`, dest: './backups/database', type: 'gzip', level: 9 }, { src: ['logs/**/*.log'], filename: `logs-backup-${new Date().toISOString().slice(0, 10)}.tar`, dest: './backups/logs', type: 'tar' }, { src: ['uploads/**/*'], filename: `uploads-backup-${new Date().toISOString().slice(0, 10)}.zip`, dest: './backups/uploads', type: 'zip', level: 6 } ]; export const backupMultiCompress = buildTools.multiCompress(backupConfigs, true); /** * 示例 6: 不同压缩级别的性能测试 * 使用不同压缩级别创建相同文件的多个版本 */ const compressionLevelTest: CompressConfig[] = [ { src: ['test-data/**/*'], filename: 'test-data-speed.zip', dest: './performance-test', type: 'zip', level: 1 // 最快压缩 }, { src: ['test-data/**/*'], filename: 'test-data-balanced.zip', dest: './performance-test', type: 'zip', level: 6 // 平衡压缩 }, { src: ['test-data/**/*'], filename: 'test-data-maximum.zip', dest: './performance-test', type: 'zip', level: 9 // 最大压缩 } ]; export const compressionTestMultiCompress = buildTools.multiCompress(compressionLevelTest, false); /** * 示例 7: 混合格式多压缩 * 创建不同格式的压缩文件以满足不同需求 */ const mixedFormatConfigs: CompressConfig[] = [ { src: ['build/**/*'], filename: 'release.zip', dest: './releases', type: 'zip', level: 6 }, { src: ['build/**/*'], filename: 'release.tar.gz', dest: './releases', type: 'gzip', level: 9 }, { src: ['build/**/*'], filename: 'release.tar', dest: './releases', type: 'tar' } ]; export const mixedFormatMultiCompress = buildTools.multiCompress(mixedFormatConfigs, true); /** * 完整的部署流水线示例 * 包含多压缩任务的完整部署流程 */ export const deploymentPipeline = series( // 首先创建环境特定的压缩包 multiEnvironmentCompress, // 然后创建备份 backupMultiCompress, // 最后打包 Monorepo 模块 parallel( monorepoMultiCompress, mixedFormatMultiCompress ) ); /** * 使用助手函数创建压缩配置的示例 */ import { compressHelpers } from '../src/modules/compress.js'; const dynamicConfigs: CompressConfig[] = [ compressHelpers.createConfig( ['src/**/*.ts'], compressHelpers.timestampedFilename('source-code'), './releases', { type: 'zip', level: compressHelpers.getCompressionLevel('balanced') } ), compressHelpers.createConfig( ['docs/**/*.md'], compressHelpers.timestampedFilename('documentation', 'tar.gz'), './releases', { type: 'gzip', level: compressHelpers.getCompressionLevel('size') } ) ]; export const dynamicMultiCompress = buildTools.multiCompress(dynamicConfigs, true); /** * 条件压缩示例 * 根据环境变量决定压缩策略 */ const conditionalConfigs: CompressConfig[] = []; // 根据环境添加不同的压缩配置 if (process.env.NODE_ENV === 'production') { conditionalConfigs.push({ src: ['dist/**/*'], filename: 'production-release.zip', dest: './releases', type: 'zip', level: 9 // 生产环境使用最大压缩 }); } else { conditionalConfigs.push({ src: ['dist/**/*'], filename: 'development-build.zip', dest: './builds', type: 'zip', level: 1 // 开发环境优先速度 }); } // 总是创建源码备份 conditionalConfigs.push({ src: ['src/**/*'], filename: compressHelpers.timestampedFilename('source-backup'), dest: './backups', type: 'zip', level: 6 }); export const conditionalMultiCompress = buildTools.multiCompress(conditionalConfigs, false); /** * 定义所有任务,方便在 gulpfile 中使用 */ export const multiCompressTasks = { 'multi-compress:serial': serialMultiCompress, 'multi-compress:parallel': parallelMultiCompress, 'multi-compress:environments': multiEnvironmentCompress, 'multi-compress:monorepo': monorepoMultiCompress, 'multi-compress:backup': backupMultiCompress, 'multi-compress:performance-test': compressionTestMultiCompress, 'multi-compress:mixed-format': mixedFormatMultiCompress, 'multi-compress:dynamic': dynamicMultiCompress, 'multi-compress:conditional': conditionalMultiCompress, 'deploy:full-pipeline': deploymentPipeline }; // 导出默认任务 export default deploymentPipeline;