momodevtools
Version:
file tools
204 lines (188 loc) • 5.95 kB
JavaScript
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,
};