如图所示,仓库是monorepo,现在先统计下每个仓库各个模块分别使用的接口数量,
分析
首先所有仓库的api接口目录路径基本一致,都会放在当前项目的额api目录下, 当然同级的有可能存在公用仓库等 没有api的目录的仓库,需要排除掉
思路
1 利用node遍历所有项目目录,统计出需要统计的模块文件,
2 读取当前api文件, 获取其长度累加, 即可统计出所有接口数量
const fs = require('fs');
const path = require('path');
const baseDir = path.join(__dirname, './packages/') ;
const files = fs.readdirSync(baseDir);
// console.log('1--找出全部目录', files)
const components = []
files.forEach(file => {
// console.log(file);
let isExist = fs.existsSync(`${baseDir}${file}/src/pages`)
if(isExist) {
components.push(file)
}
});
// console.log('2--找出需要的项目的目录',components);
const projectNameObj = {}
components.forEach(projectName => {
const proPath = `${baseDir}${projectName}/src/pages`
const projectSubNameArr = fs.readdirSync(proPath);
// console.log('3--找出需要的子项目的目录',projectSubNameArr);
projectSubNameArr.forEach(proSubName => {
const apiPath = `${proPath}/${proSubName}/api/index.js`
projectNameObj[proSubName] = apiPath
})
})
const ret = {}
Object.keys(projectNameObj).forEach(key => {
const apiPath = projectNameObj[key]
const apiIdxDefault = require(apiPath)
const apiIdxObj = apiIdxDefault.default
ret[key] = apiIdxObj
})
const retObj = {}
Object.keys(ret).forEach(key => {
const project = ret[key]
let len = 0
Object.keys(project).forEach(projectApi => {
const projectApiObj = project[projectApi]
len += Object.keys(projectApiObj).length
})
retObj[key] = len
})
console.log('4--找出需要的子项目的api',retObj);
3 PS: 由于原仓库使用到es6模块,所以node导入需要引入babel,由于是多仓库的原因 ,nodejs 执行的时候最好在根目录执行babel命令,同时使用babel.config.js 而不是.bablerc, 否则会报错SyntaxError: Cannot use import statement outside a module,修改babel配置文件即可