const {chalkTag, findApp, fs, fsExtra} = require("./tools"); const compiler = require('vue-template-compiler') const getAppInfo = (file, apps) => { if (/[\\\/](App[A-Z][^\\\/]+)\.vue$/g.test(file)) { const name = file.replace(/.+[\\\/](App[^\\\/]+)\.vue$/, '$1'), source = fs.readFileSync(file).toString(), parsed = compiler.parseComponent(source), script = parsed.script?.content || "", label = script.match(/label:[^,]+/)?.[0]?.replace(/.+["']([^"']+).+/, '$1') const paths = file.split(/[\\\/]/) apps.push({ id: file.replace(/\.vue$/, '').replace(/[\\\/]/g, '_'), label: label || name, path: `/${file.replace(/\.vue$/, '').replace(/[\\\/]/g, '/')}`, workspace: paths.at(0), esm: ['.', paths.slice(1)].flat().join("/"), name }) } } const start = () => { chalkTag.info("开始扫描库工程...") const list = [] Promise.all([ findApp('packages', app => getAppInfo(app, list)), findApp('project', app => getAppInfo(app, list)), ]).then(() => { fsExtra.outputJson('examples/modules.json', {apps: list}) chalkTag.done("扫描完毕") }) } start()