/** * 文件移动 */ export class AMFileMover{ /** * 源路径 */ srcPath:string; /** * 目标路径 */ dstPath:string; /** * fs模块 */ fsMdl:any; /** * path模块 */ pathMdl:any; /** * * @param srcPath 源路径 * @param dstPath 目标路径 */ constructor(srcPath,pagePath,serverPath){ this.fsMdl = require('fs'); this.pathMdl = require('path'); // srcPath = this.pathMdl.resolve(srcPath); // pagePath = this.pathMdl.resolve(pagePath); // serverPath = this.pathMdl.resolve(serverPath); this.movePage(srcPath,pagePath); this.moveDataType(srcPath,pagePath,serverPath); // this.moveServer(srcPath,serverPath); } /** * 移动页面代码 */ movePage(src,dst){ src = this.pathMdl.resolve(src,'pages'); dst = this.pathMdl.resolve(dst,'module'); for(const d of ['home.js','header.js']){ this.fsMdl.rename( this.pathMdl.resolve(src,d), this.pathMdl.resolve(dst,'__base',d), (err)=>{ if(err){ console.error(err); } }); } } /** * 移动datatype代码 */ moveDataType(src,dstPage,dstServer){ src = this.pathMdl.resolve(src,'datatype'); dstPage = this.pathMdl.resolve(dstPage,'module','__data'); //datatype base文件 const typeBase= this.pathMdl.resolve(dstPage,'__base'); const dirArr = this.fsMdl.readdirSync(src,{withFileTypes:true}); //普通数据类型相关 for (const dirent of dirArr) { if(!dirent.name.startsWith('__')){ this.fsMdl.rename(this.pathMdl.resolve(src,dirent.name),this.pathMdl.resolve(dstPage,dirent.name),(err)=>{ if(err){ console.error(err); } }); }else if(!dirent.name.endsWith('.ts')){ //带__的文件 this.fsMdl.rename(this.pathMdl.resolve(src,dirent.name),this.pathMdl.resolve(typeBase,dirent.name),(err)=>{ if(err){ console.error(err); } }); } } //amdata config this.fsMdl.rename(this.pathMdl.resolve(src,'__amdataconfig.ts'),this.pathMdl.resolve(dstServer,'module','service','__data','__amdataconfig.ts'),(err)=>{ if(err){ console.error(err); } }); // condservice this.fsMdl.rename(this.pathMdl.resolve(src,'__condservice.ts'),this.pathMdl.resolve(dstServer,'module','service','__data','__condservice.ts'),(err)=>{ if(err){ console.error(err); } }); } //移动服务器代码 moveServer(src,dst){ src = this.pathMdl.resolve(src,'server'); dst = this.pathMdl.resolve(dst,'module'); for(let d of ['model','route','service']){ let src1 = this.pathMdl.resolve(src,d); let dst1 = this.pathMdl.resolve(dst,d,'gen'); if(!this.fsMdl.existsSync(dst1)){ this.fsMdl.mkdirSync(dst1,{recursive:true}); } let dirArr = this.fsMdl.readdirSync(src1,{withFileTypes:true}); for (const dirent of dirArr) { this.fsMdl.rename(this.pathMdl.resolve(src1,dirent.name),this.pathMdl.resolve(dst1,dirent.name),(err)=>{ if(err){ console.error(err); } }); } } } /** * 初始化 * @param dst 目标目录 */ init(dst:string){ const basePath = this.pathMdl.resolve(dst); if(this.fsMdl.existsSync(basePath)){ this.fsMdl.rmdirSync(basePath,{recursive:true}) } this.fsMdl.mkdirSync(basePath); const dirs = ['pages','server']; for(let dir of dirs){ const p = this.pathMdl.resolve(basePath,dir); this.fsMdl.mkdirSync(dst); //复制文件 this.copyDir(dir,p); this.copyDir('dir',p); } } /** * 复制目录 * @param src 源目录 * @param dst 目标目录 */ copyDir(src:string,dst:string){ //建目标目录 if(!this.fsMdl.existsSync(dst)){ this.fsMdl.rmdirSync(dst,{recursive:true}) } //读源目录 const dirArr = this.fsMdl.readdirSync(src,{withFileTypes:true}); for (const dirent of dirArr) { const sp = this.pathMdl.resolve(src,dirent.name); const dp = this.pathMdl.resolve(dst,dirent.name); //递归处理 if(dirent.isDirectory()){ this.copyDir(sp,dp); }else{ //复制文件 this.fsMdl.copyFileSync(sp,dp); } } } }