产品库自动化,自动根据pages下的内容生成pages.json
This commit is contained in:
		
							
								
								
									
										78
									
								
								bin/serve.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								bin/serve.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| const fsExtra = require('fs-extra') | ||||
| const path = require('path') | ||||
| 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 chalk = require('chalk') | ||||
| 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) => { | ||||
|   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 start = () => { | ||||
|   chalkTag.info('开始生成pages.json...') | ||||
|   let json = { | ||||
|     easycom: { | ||||
|       "^u-(.*)": "@/uview/components/u-$1/u-$1.vue" | ||||
|     }, | ||||
|     pages: [], | ||||
|     globalStyle: { | ||||
|       pageOrientation: "auto", | ||||
|       navigationStyle: "custom" | ||||
|     } | ||||
|   } | ||||
|   findApp('src/pages', file => { | ||||
|     if (/.*\\(.+)\.vue/g.test(file)) { | ||||
|       json.pages.push({path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g,'/')}) | ||||
|     } | ||||
|   }).then(() => { | ||||
|     fsExtra.outputJson('src/pages.json', json, () => { | ||||
|       chalkTag.done('生成pages.json') | ||||
|     }) | ||||
|   }) | ||||
| } | ||||
|  | ||||
| start(); | ||||
		Reference in New Issue
	
	Block a user