UNPKG

@honor-minigame/cli

Version:

honor minigame pack cli

86 lines (79 loc) 2.79 kB
import fs from "fs" import path from "path" import { calcDataDigest } from "../common/utils.js" import { createFullPackage, createSubPackages } from "./package.js" /** * 创建完整包和分包列表 * @param appPackageName * @param subpackageOptions * @param appIcon * @returns {{fullPackage: Package, subPackages: *}} */ function createPackagesDefinition(appPackageName, subpackageOptions, appIcon) { const fullPackage = createFullPackage(appPackageName) let subPackages if (subpackageOptions && subpackageOptions.length > 0) { subPackages = createSubPackages(appPackageName, subpackageOptions, appIcon) } return { fullPackage, subPackages, } } /** * 将各资源分派给各个要打出来的包 * @param {String[]} files 文件列表 * @param {String} base 文件相对的目录 * @param {Package} fullPackage 整包 * @param {Package[]} subPackages 分包列表 */ function allocateResourceToPackages(files, base, fullPackage, subPackages) { files.forEach((fileBuildPath) => { const fileAbsPath = path.join(base, fileBuildPath) const fileContentBuffer = fs.readFileSync(fileAbsPath) const fileContentDigest = calcDataDigest(fileContentBuffer) // 资源基本信息 const resourceInfo = [fileBuildPath, fileContentBuffer, fileContentDigest] if (!fileBuildPath.match(/build\//)) { fullPackage.addResource(...resourceInfo) } // 标志此资源是否属于主包,需要放入主包 let belongToBasePkg = true if (subPackages) { // 遍历除主包整包外的分包,判断此文件是否属于某个分包的 for (let i = 1; i < subPackages.length; i++) { const pkg = subPackages[i] if ( pkg.standalone && (fileBuildPath === "manifest.json" || (pkg.icon && pkg.icon.indexOf(fileBuildPath) > 0)) ) { pkg.addResource(...resourceInfo) } if (pkg.subMatch.test(fileBuildPath)) { belongToBasePkg = false // 保留第一级 resourceInfo[0] = fileBuildPath pkg.addResource(...resourceInfo) break } } if (belongToBasePkg) { const basePkg = subPackages[0] basePkg.addResource(...resourceInfo) } } }) // 判断每个包的资源是否为空,如果为空抛出异常,停止打包 if (subPackages) { subPackages.forEach((item) => { const resource = item.resourceList if (!resource.length) { throw new Error( `### HONOR PACK ### 分包失败:分包${item.fileName}内不包含任何资源` ) } }) } } export { createPackagesDefinition, allocateResourceToPackages }