80 lines
2.5 KiB
JavaScript
80 lines
2.5 KiB
JavaScript
import fs from 'fs'
|
||
import path from 'path'
|
||
/**
|
||
* 注意,打包主模板页面(pages/index)先删掉dis文件夹,再.gitignore 注释掉dist
|
||
* 打包其它模板需要保留dist
|
||
*/
|
||
const config = {
|
||
pages: './src/pages',
|
||
// pagesInclude: ['jlgh/coupon.vue', 'jlgh/redeem.vue'],
|
||
// pagesInclude: ['jlgh/index.vue'],
|
||
// pagesInclude: ['jlgh/login.vue'],
|
||
// pagesInclude: ['jlgh/orderDetail.vue'],
|
||
// pagesInclude: ['index'],
|
||
pagesInclude: ['xyyh'],
|
||
}
|
||
|
||
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 }
|