@honor-minigame/cli
Version:
honor minigame pack cli
81 lines (69 loc) • 2.54 kB
JavaScript
/**
* 过滤manifest.json中分包配置。只取合法的配置,不正确的配置被过滤掉
*/
import fs from 'fs-extra';
import path from 'path'
import * as constanst from './constanst.js'
import * as paths from './paths.js'
import { info } from '../../utils/logger.js';
/**
* 将配置中的分包转化为webpack的entry
* 将配置中的分包转化为webpack的externals
* 将配置中的分包转化为resConfig
* @param {Array} subpackages
*/
export function toConfigs(subpackages) {
const entry = Object.create(null)
const externals = Object.create(null)
const resConfig = []
let isMain = false
subpackages.forEach(({ name, root }) => {
const pkgPath = path.join(paths.SRC, root)
let entryKey, entryFile, mFile
if (name === 'main') {
isMain = true
}
if (fs.statSync(pkgPath).isDirectory()) {
// 如果是文件夹,取当前文件夹中的game.js作为入口
entryFile = path.join(pkgPath, constanst.ENTRY)
// 入口名为分包名+game
entryKey = path.join(root, constanst.ENTRY_NAME)
// 如果是文件夹,取当前文件夹中的game.js作为模块
mFile = path.posix.join(root, constanst.ENTRY)
// 如果是文件夹,打包时要拷贝资源,生成资源配置文件
resConfig.push({ name, root })
} else {
entryFile = pkgPath
// 去掉.js的后缀,作为entryKey
const ps = path.parse(root)
entryKey = path.posix.join(ps.dir, ps.name)
mFile = root
}
entry[entryKey] = entryFile
externals[name] = `commonjs ${mFile}`
})
return { isMain, externals, entry, resConfig }
}
export function filter(subpackages = []) {
return subpackages.filter(({ name, root }, ind, arr) => {
if (!name) {
info('分包配置中name为空的分包,已经被过滤!')
return false
}
if (!root) {
info(`分包配置中name=${name}的分包,root不存在,已经被过滤!`)
return false
}
// 检查 root 值对应的目录是否存在
const pkgPath = path.join(paths.SRC, root)
if (!fs.existsSync(pkgPath)) {
info(`分包配置name=${name}的分包,在${paths.SRC}目录下不存在${pkgPath},已经被过滤!`)
return false
}
if (fs.statSync(pkgPath).isDirectory() && !fs.existsSync(path.join(pkgPath, constanst.ENTRY))) {
info(`分包配置name=${name}的分包,在${pkgPath}目录下不存在${constanst.ENTRY},已经被过滤!`)
return false
}
return true
})
}