增加手动同步库信息脚本
This commit is contained in:
		
							
								
								
									
										38
									
								
								bin/appsSync.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								bin/appsSync.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | const axios = require("axios"); | ||||||
|  | const {chalkTag, findApp, fs} = require("./tools"); | ||||||
|  | const compiler = require('vue-template-compiler') | ||||||
|  | const saveApps = app => { | ||||||
|  |   if (app.list.length > 0) { | ||||||
|  |     return axios.post("http://192.168.1.87:12525/node/wechatapps/addOrUpdate", app, {timeout: 1000}).then(res => { | ||||||
|  |       if (res.data.code == 0) chalkTag.done("产品库目录已同步至后台数据库...") | ||||||
|  |     }).catch(() => 0) | ||||||
|  |   } else return Promise.reject("没有应用") | ||||||
|  | } | ||||||
|  | const getAppInfo = (file, apps) => { | ||||||
|  |   if (/[\\\/](App[^\\\/]+)\.vue$/g.test(file)) { | ||||||
|  |     const name = file.replace(/.+[\\\/](App[^\\\/]+)\.vue$/, '$1'), | ||||||
|  |         source = fs.readFileSync(file).toString(), | ||||||
|  |         parsed = compiler.parseComponent(source), | ||||||
|  |         script = parsed.script?.content || "", | ||||||
|  |         label = script.match(/label:[^,]+/)?.[0]?.replace(/.+["']([^"']+).+/, '$1') | ||||||
|  |     apps.push({ | ||||||
|  |       id: file.replace(/\.vue$/, '').replace(/[\\\/]/g, '_'), | ||||||
|  |       label: label || name, | ||||||
|  |       libPath: file.replace(/\.vue$/, ''), | ||||||
|  |       name, | ||||||
|  |       type: 'web' | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | const sync = () => { | ||||||
|  |   chalkTag.info("开始扫描库工程...") | ||||||
|  |   const list = [] | ||||||
|  |   Promise.all([ | ||||||
|  |     findApp('packages', app => getAppInfo(app, list)), | ||||||
|  |     findApp('project', app => getAppInfo(app, list)), | ||||||
|  |   ]).then(() => { | ||||||
|  |     chalkTag.info("正在同步...") | ||||||
|  |     saveApps({type: "web", list}).catch(() => 0).finally(() => chalkTag.done("同步成功!")) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | sync() | ||||||
							
								
								
									
										70
									
								
								bin/tools.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								bin/tools.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | |||||||
|  | const fsExtra = require('fs-extra') | ||||||
|  | const path = require('path') | ||||||
|  | const chalk = require('chalk') | ||||||
|  | const fs = require('fs') | ||||||
|  | /** | ||||||
|  |  * 将函数封装成promise | ||||||
|  |  */ | ||||||
|  | const promisify = fn => { | ||||||
|  |   return function () { | ||||||
|  |     let args = arguments; | ||||||
|  |     return new Promise(function (resolve, reject) { | ||||||
|  |       [].push.call(args, function (err, result) { | ||||||
|  |         if (err) { | ||||||
|  |           console.log(err) | ||||||
|  |           reject(err); | ||||||
|  |         } else { | ||||||
|  |           resolve(result); | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |       fn.apply(null, args); | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const readdir = promisify(fs.readdir) | ||||||
|  | const stat = promisify(fs.stat) | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 封装打印工具 | ||||||
|  |  */ | ||||||
|  | const {log} = console | ||||||
|  | const chalkTag = { | ||||||
|  |   info: msg => log([chalk.bgBlue.black(' INFO '), msg].join(' ')), | ||||||
|  |   done: msg => log([chalk.bgGreen.black(' DONE '), msg].join(' ')), | ||||||
|  |   warn: msg => log([chalk.bgYellow.black(' WARN '), msg].join(' ')), | ||||||
|  |   error: msg => log([chalk.bgRed.black(' ERROR '), msg].join(' ')), | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 遍历应用的方法 | ||||||
|  |  */ | ||||||
|  | const findApp = (dir, cb) => { | ||||||
|  |   fsExtra.ensureDirSync(dir) | ||||||
|  |   return readdir(dir).then(apps => { | ||||||
|  |     return Promise.all(apps.map(e => { | ||||||
|  |       let cPath = path.join(dir, e) | ||||||
|  |       return stat(cPath).then(state => { | ||||||
|  |         if (state.isDirectory()) { | ||||||
|  |           return findApp(cPath, cb) | ||||||
|  |         } else if (state.isFile()) { | ||||||
|  |           cb && cb(cPath) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }) || []) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | const copyFiles = (dir, source = 'src/mods') => { | ||||||
|  |   chalkTag.info(`开始扫描${source}...`) | ||||||
|  |   return new Promise(resolve => { | ||||||
|  |     fsExtra.emptyDir(dir, err => { | ||||||
|  |       if (!err) { | ||||||
|  |         fsExtra.copy(source, dir).then(() => { | ||||||
|  |           chalkTag.done(source + ' 扫描完毕') | ||||||
|  |           resolve() | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | module.exports = {findApp, chalkTag, fsExtra, copyFiles, fs, path} | ||||||
| @@ -6,7 +6,8 @@ | |||||||
|   "scripts": { |   "scripts": { | ||||||
|     "dev": "vue-cli-service serve", |     "dev": "vue-cli-service serve", | ||||||
|     "lib": "npm unpublish --force&&npm publish", |     "lib": "npm unpublish --force&&npm publish", | ||||||
|     "ui": "npm i dvcp-ui@latest" |     "ui": "npm i dvcp-ui@latest", | ||||||
|  |     "sync": "node bin/appsSync.js" | ||||||
|   }, |   }, | ||||||
|   "files": [ |   "files": [ | ||||||
|     "packages", |     "packages", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user