import {IFile} from "../type/interface" import {wran, getFilePackageName} from '../util' import fs, { Stats } from 'fs' import path from 'path' import File from "../type/impl/File" export default class FileScanner{ private scanDirs: Array = [] public static files: Array = [] constructor(scanDirs: Array){ this.scanDirs = scanDirs } public scanFiles(): void{ if(this.scanDirs && Array.isArray(this.scanDirs)){ const sysPath: string = process.cwd() this.scanDirs.forEach((dir: string): void => { const dirPath: string = path.resolve(sysPath, dir) const isPathAvailable: boolean = fs.existsSync(dirPath) if(!isPathAvailable){ wran('component扫描路径错误:', dirPath, '不存在此路径') }else{ readFiles(dirPath, FileScanner.files) } }) } if(FileScanner.files.length === 0){ wran('没有扫描到任何有效的路径!') } } } function readFiles(readPath: string, files: Array): void{ const dirOrFiles: Array = fs.readdirSync(readPath) dirOrFiles.forEach((_path: string): void => { const filePath = path.resolve(readPath, _path) const stat: Stats = fs.statSync(filePath) if(stat.isFile()){ let file = require(filePath) if(file.default){ const packageName = getFilePackageName(filePath) + '.' + file.default.name FileScanner.files.push(new File({packageName, cost: file.default})) } }else{ readFiles(filePath, files) } }) }