34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
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()
|