import fs from 'fs' import path from 'path' const config = { pages: './src/pages', // pagesInclude: ['jlgh/coupon.vue', 'jlgh/redeem.vue'], // pagesInclude: ['jlgh/index.vue'], // pagesInclude: ['jlgh/login.vue'], pagesInclude: ['index'], } const { pages, pagesInclude } = config function getPages() { const srcPath = path.resolve(__dirname, pages) // 所有的模块 const allModule = fs.readdirSync(srcPath) // 指定的完整模块 const completeModule = pagesInclude.filter((item) => item.indexOf('.vue') === -1) // 需要排除的整个模块 const excludeModule = allModule.filter((item) => !completeModule.includes(item)) // 指定特定页面的模块 const targetpageModule = pagesInclude.filter((item) => item.indexOf('.vue') >= 0) const targetModule = targetpageModule.reduce((acc, cur) => { const [dir, file] = cur.split('/') if (Array.isArray(acc[dir])) { acc[dir].push(file) } else { acc[dir] = [file] } return acc }, {}) // 需要排除的特定的页面 const excludePages = [] Object.keys(targetModule).forEach((ele, index) => { if (excludeModule.includes(ele)) { excludeModule.splice(excludeModule.indexOf(ele), 1) } const targetPages = fs .readdirSync(path.resolve(__dirname, pages, ele)) .filter((element) => element.indexOf('.vue') >= 0) const targetExclude = targetPages .filter((elem) => !targetModule[ele].includes(elem)) .map((current) => `${ele}/${current}`) excludePages.push(...targetExclude) }) console.log('排除的模块和页面--->', [...excludeModule, ...excludePages]) console.log('打包的模块和页面--->', pagesInclude) return { exclude: [...excludeModule, ...excludePages], include: pagesInclude, } } function createOutputDir(pageInfo) { const _pages = pageInfo.filter((item) => item.indexOf('.vue') > -1) if (!_pages.length) { return pageInfo.join('-') } else { const temp = _pages.reduce((acc, cur) => { const [dir, file] = cur.split('/') if (Array.isArray(acc[dir])) { acc[dir].push(file) } else { acc[dir] = [file] } return acc }, {}) const result = Object.entries(temp)[0] return `${result[0]}-${result[1].join('-').replace(/.vue/g, '')}` } } export { getPages, createOutputDir }