const fs = require('fs'); const path = require('path'); const root = process.cwd(); const readdirSync = p => fs.readdirSync(p); const existsSync = p => fs.existsSync(p); const isFile = p => fs.statSync(p).isFile(); const isDirectory = p => fs.statSync(p).isDirectory(); const getBaseName = p => path.basename(p); const getExtName = p => path.extname(p); const getFileName = p => getBaseName(p); const getDirName = p => path.dirname(p); const join = (...ps) => path.join(root, ...ps); const writeJsonToFile = p => json => fs.writeFileSync(p, JSON.stringify(json, null, 2)); const tools = require('./src/tools') const config = { // origin: 'https://cdn-ali.jianyu360.com', libName: 'lib', origin: '', root: '/' } // 递归获取目录下所有文件,并组合为对象树 const search = p => { if (existsSync(p)) { if (isFile(p)) { return { name: getFileName(p), path: getDirName(p) }; } else if (isDirectory(p)) { const paths = readdirSync(p); return paths.map(_p => { const tmp = path.join(p, _p); if (isFile(tmp)) { return search(tmp); } else { return { name: getFileName(_p), list: search(tmp) }; } }); } } }; // 将手机号 const getSourceMap = m => { // 最外层库名 return m.filter(lib => lib.list).map(lib => { // 下一层版本号 const versions = lib.list.map(version => { // 当前路径 const rPath = `/${config.libName}/${lib.name}/${version.name}/` const sourceArr = tools.getAllFilePath(join(rPath)) const sourcePathArr = sourceArr.map(s => config.origin + s.replace(__dirname, '').replace(/\\/g, '\/')) console.log(rPath) return { version: version.name, // sourcePath: version.list, sourcePath: sourcePathArr } }) return { lib: lib.name, versions } }) } writeJsonToFile('./libs.json')(getSourceMap(search(config.libName)))