用node统计项目中有多少个接口

274 阅读1分钟

企业微信截图_16782686832728.png 如图所示,仓库是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配置文件即可

企业微信截图_16782683629136.png

企业微信截图_16782683817854.png

企业微信截图_1678268433435.png

企业微信截图_1678268461880.png