UNPKG

momodevtools

Version:

file tools

204 lines (188 loc) 5.95 kB
const { getPackagesfromPages, savefilemap } = require("./mapfile.js"); const { getYapiList } = require("./yapi.js"); const { countCostTime } = require("./count"); const { mkdirsSync } = require("./mapfile"); const fs = require("fs"); const path = require("path"); /** * 获取pages目录 * @param {path}} rootPath 根目录 */ async function getpages(rootPath) { const _pagePath = path.resolve(rootPath, "pages"); const _jsonPath = path.resolve(rootPath, "pages.json"); // 页面打包配置 const configPath = path.resolve(rootPath, "..", "toolsConfig.json"); let pagesConfig = {}, themPack; if (!fs.existsSync(_pagePath)) { throw "文件不存在"; } // 读取配置文件 if (fs.existsSync(configPath)) { let _config = require(configPath); if (_config.pagesconfig) { pagesConfig = _config.pagesconfig; } } // 这里可能需要调整 const fileMapData = await getPackagesfromPages(_pagePath); // 获取原页面的配置信息 let _pagesJson = {}; // 读取原有配置 if (fs.existsSync(_jsonPath)) { _pagesJson = fs.readFileSync(_jsonPath, "utf-8"); _pagesJson = JSON.parse(_pagesJson); // 保持首页的位置不变 if (_pagesJson.pages) { let homepage = _pagesJson.pages[0]; const homeidx = fileMapData.pages.findIndex( (e) => e.path == homepage.path ); if (homeidx > -1) { homepage = fileMapData.pages[homeidx]; fileMapData.pages.splice(homeidx, 1); fileMapData.pages.unshift(homepage); } } // 处理只显示tabBar 上页面的情况 if (_pagesJson.tabBar && pagesConfig.onlytabs) { let _pages = fileMapData.pages; let tbpages = _pages.filter((epg, epgidx) => { if (epgidx == 0) return true; const idx = _pagesJson.tabBar.list.findIndex( (etb) => etb.pagePath == epg.path ); return idx > -1; }); fileMapData.pages = tbpages; } } // 根据主题配置修改数据 if (pagesConfig) { _pagesJson = Object.assign(_pagesJson, pagesConfig); } // 根路由页面 _pagesJson.pages = fileMapData.pages; // 分包数据 _pagesJson.subPackages = []; if (themPack) { // 获取指定分包 themPack.forEach((e) => { const ele = fileMapData.subPackages[e]; if (ele && ele.pages.length) { _pagesJson.subPackages.push(ele); } }); } else { // 获取全部分包 for (let key in fileMapData.subPackages) { const ele = fileMapData.subPackages[key]; if (ele.pages.length) { _pagesJson.subPackages.push(ele); } } } await fs.writeFileSync( _jsonPath, `${JSON.stringify(_pagesJson, null, "\t")}` ); return _pagesJson; } /** * 刷新文件 map * @param {path}} rootPath 根目录 */ async function getFileMap(rootPath) { const configPath = path.resolve(rootPath, "..", "toolsConfig.json"); let filename = "filemap.md"; let folder = ""; if (fs.existsSync(configPath)) { const { filemapconfig: filemap } = require(configPath); if (filemap.folder) { folder = filemap.folder; } if (filemap.filename) { filename = filemap.filename; } } let _pathMapmd = path.resolve(rootPath, "..", folder, filename); // 获取项目根目录 const _pagePath = path.resolve(rootPath, "pages"); await savefilemap(_pagePath, _pathMapmd); return _pathMapmd; } /** * 获取 yapi * @param {path} rootPath 根目录 */ async function getYapi(rootPath) { const configPath = path.resolve(rootPath, "..", "toolsConfig.json"); let writeFilePath = path.resolve(rootPath, "apiconfig.json"); let _yapi; if (fs.existsSync(configPath)) { const { yapiconfig } = require(configPath); _yapi = yapiconfig; let filetype = _yapi.filetype || "json"; let _objData; if (_yapi.filename && typeof _yapi.filename == "object") { _objData = await getYapiList(_yapi, filetype, true); for (const key in _objData.saveData) { if (Object.hasOwnProperty.call(_objData.saveData, key)) { const fileData = _objData.saveData[key]; writeFilePath = path.resolve( rootPath, _yapi.folder || "", _yapi.filename[key] || "api." + key + "." + filetype ); mkdirsSync(path.resolve(writeFilePath, "..")); await fs.writeFileSync(writeFilePath, fileData); } } } else { writeFilePath = path.resolve( rootPath, _yapi.folder || "", _yapi.filename || "apiconfig.json" ); mkdirsSync(path.resolve(writeFilePath, "..")); _objData = await getYapiList(_yapi, filetype); await fs.writeFileSync(writeFilePath, _objData.saveData); } return { count: _objData.count, writeFilePath }; } else { throw "没有有效的yapi 配置文件!"; } } function cgetpages(rootPath) { countCostTime(getpages(rootPath)) .then((res) => { const filePath = path.resolve(rootPath, "pages.json"); console.log( `pages创建完成,\n 创建目录 ${filePath} \n 耗时${res.costTime}ms` ); }) .catch((err) => { console.error(err); }); } function cgetFileMap(rootPath) { countCostTime(getFileMap(rootPath)).then(({ res, costTime }) => { console.log(`fileMap创建完成,\n 创建 ${res} \n 耗时${costTime}ms`); }); } function cgetYapi(rootPath) { console.log("数据同步中..."); countCostTime(getYapi(rootPath, "js")).then(({ res, costTime }) => { console.log( `${res.count}接口同步完成,\n 创建目录 ${rootPath} \n 耗时${costTime}ms` ); }); } module.exports = { getpages, getFileMap, getYapi, cgetpages, cgetFileMap, cgetYapi, };