UNPKG

@honor-minigame/cli

Version:

honor minigame pack cli

82 lines (70 loc) 2.71 kB
/** * 过滤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 }) // main.js 的简单内容由 ZipMainPlugin 在 afterEmit 钩子中写入到 build 目录 } 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 }) }