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()
 |