@honor-minigame/cli
Version:
honor minigame pack cli
86 lines (79 loc) • 2.79 kB
JavaScript
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 }