feat: add pack-deploy module
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@kevisual/envision-cli", |   "name": "@kevisual/envision-cli", | ||||||
|   "version": "0.0.15", |   "version": "0.0.16", | ||||||
|   "description": "envision command tools", |   "description": "envision command tools", | ||||||
|   "main": "dist/index.js", |   "main": "dist/index.js", | ||||||
|   "type": "module", |   "type": "module", | ||||||
|   | |||||||
| @@ -3,10 +3,11 @@ import path from 'path'; | |||||||
| import * as tar from 'tar'; | import * as tar from 'tar'; | ||||||
| import glob from 'fast-glob'; | import glob from 'fast-glob'; | ||||||
| import { program, Command } from '@/program.ts'; | import { program, Command } from '@/program.ts'; | ||||||
| import { getBaseURL, getConfig } from '@/module/index.ts'; | import { getBaseURL, getConfig, query } from '@/module/index.ts'; | ||||||
| import { fileIsExist } from '@/uitls/file.ts'; | import { fileIsExist } from '@/uitls/file.ts'; | ||||||
| import ignore from 'ignore'; | import ignore from 'ignore'; | ||||||
| import FormData from 'form-data'; | import FormData from 'form-data'; | ||||||
|  | import { chalk } from '@/module/chalk.ts'; | ||||||
|  |  | ||||||
| // 查找文件(忽略大小写) | // 查找文件(忽略大小写) | ||||||
| async function findFileInsensitive(targetFile: string): Promise<string | null> { | async function findFileInsensitive(targetFile: string): Promise<string | null> { | ||||||
| @@ -289,19 +290,75 @@ const uploadFiles = async (filePath: string, collection: any): Promise<any> => { | |||||||
|     ); |     ); | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  | const deployLoadFn = async (id: string, fileKey: string, force = false) => { | ||||||
|  |   if (!id) { | ||||||
|  |     console.error(chalk.red('id is required')); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |   // pkg: { | ||||||
|  |   //   name: 'mark', | ||||||
|  |   //   version: '0.0.2', | ||||||
|  |   //   description: '', | ||||||
|  |   //   main: 'dist/app.mjs', | ||||||
|  |   //   app: [Object], | ||||||
|  |   //   files: [Array], | ||||||
|  |   //   scripts: [Object], | ||||||
|  |   //   keywords: [Array], | ||||||
|  |   //   author: 'abearxiong <xiongxiao@xiongxiao.me>', | ||||||
|  |   //   license: 'MIT', | ||||||
|  |   //   type: 'module', | ||||||
|  |   //   devDependencies: [Object], | ||||||
|  |   //   dependencies: [Object] | ||||||
|  |   // }, | ||||||
|  |   const res = await query.post({ | ||||||
|  |     path: 'micro-app', | ||||||
|  |     key: 'deploy', | ||||||
|  |     data: { | ||||||
|  |       id: id, | ||||||
|  |       key: fileKey, | ||||||
|  |       force: force, | ||||||
|  |     }, | ||||||
|  |   }); | ||||||
|  |   if (res.code === 200) { | ||||||
|  |     console.log('deploy-load success. current version:', res.data?.pkg?.version); | ||||||
|  |   } else { | ||||||
|  |     console.error('deploy-load failed', res.message); | ||||||
|  |   } | ||||||
|  |   return res; | ||||||
|  | }; | ||||||
| const packCommand = new Command('pack') | const packCommand = new Command('pack') | ||||||
|   .description('打包应用, 默认使用 package.json 中的 files 字段') |   .description('打包应用, 默认使用 package.json 中的 files 字段') | ||||||
|   .option('-i, --ignore', '使用 .npmignore 文件模式去忽略文件进行打包, 不需要package.json中的files字段') |   .option('-i, --ignore', '使用 .npmignore 文件模式去忽略文件进行打包, 不需要package.json中的files字段') | ||||||
|   .option('-p, --publish', '打包并发布') |   .option('-p, --publish', '打包并发布') | ||||||
|  |   .option('-u, --update', 'show command for deploy to server') | ||||||
|   .action(async (opts) => { |   .action(async (opts) => { | ||||||
|     let value: { collection: Record<string, any>; outputFilePath: string } = await packLib(opts.ignore); |     let value: { collection: Record<string, any>; outputFilePath: string } = await packLib(opts.ignore); | ||||||
|     if (opts.publish && value?.collection) { |     if (opts.publish && value?.collection) { | ||||||
|       console.log('\n\npublish'); |  | ||||||
|       const { collection, outputFilePath } = value; |       const { collection, outputFilePath } = value; | ||||||
|       await uploadFiles(outputFilePath, collection); |       try { | ||||||
|  |         const res = await uploadFiles(outputFilePath, collection); | ||||||
|  |         if (res.code === 200 && opts?.update) { | ||||||
|  |           const id = res.data.id; | ||||||
|  |           if (opts?.update) { | ||||||
|  |             console.log(chalk.blue('example: '), 'envision pack-deploy ', id, '<key>'); | ||||||
|  |             console.log('envision pack-deploy ', id); | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } catch (error) { | ||||||
|  |         console.error('Error uploading file:', error); | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|     // |     // | ||||||
|   }); |   }); | ||||||
|  | const packDeployCommand = new Command('pack-deploy') | ||||||
|  |   .argument('<id>', 'id') | ||||||
|  |   .argument('<fileKey>', 'fileKey, 服务器的部署文件夹的列表') | ||||||
|  |   .option('-f --force', 'force') | ||||||
|  |   .action(async (id, fileKey, opts) => { | ||||||
|  |     const { force } = opts || {}; | ||||||
|  |     const res = await deployLoadFn(id, fileKey, force); | ||||||
|  |  | ||||||
|  |   }); | ||||||
|  | program.addCommand(packDeployCommand); | ||||||
| program.addCommand(publishCommand); | program.addCommand(publishCommand); | ||||||
| program.addCommand(packCommand); | program.addCommand(packCommand); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user