From 6652b5edde278e9a8d31640473ff0e3e4a261268 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周六, 03 5月 2025 17:41:12 +0800
Subject: [PATCH] 22
---
HIAWms/web/script/build.js | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/HIAWms/web/script/build.js b/HIAWms/web/script/build.js
new file mode 100644
index 0000000..c9db6a3
--- /dev/null
+++ b/HIAWms/web/script/build.js
@@ -0,0 +1,109 @@
+const crossSpawn = require('cross-spawn')
+const slash = require('slash')
+const { writeFileSync, rmSync, ensureFileSync } = require('fs-extra')
+const { globSync } = require('glob')
+const path = require('path')
+const os = require('os')
+const baseBuildFile = './node_modules/.cache/widgets.json'
+let isSingleBuild = false
+const isWin = process.platform === 'win32'
+const argvPath = './script/.argv'
+const widgetName = process.argv[process.argv.length - 1]
+const widgetsPath = globSync(`./src/widgets/*/index.ts`)
+const getWidgetNames = widgetsPath.map((file) => {
+ const parts = isWin
+ ? path.resolve(file).split('\\')
+ : path.resolve(file).split('/')
+ return parts[parts.length - 2]
+})
+
+if (getWidgetNames.includes(widgetName)) {
+ isSingleBuild = true
+ writeFileSync(argvPath, widgetName)
+}
+
+buildWidgets()
+
+function buildWidgets() {
+ const isWin = process.platform === 'win32'
+ const argv = process.argv || []
+
+ const widgetName = argv[argv.length - 1]
+
+ const widgetsPath = globSync(`./src/widgets/*/index.ts`)
+ const widgetNames = widgetsPath.map((file) => {
+ const parts = isWin
+ ? path.resolve(file).split('\\')
+ : path.resolve(file).split('/')
+ return parts[parts.length - 2]
+ }) // 鎵撳寘涓�涓粍浠�
+
+ if (widgetName && widgetNames.includes(widgetName)) {
+ isSingleBuild = true
+ writeFileSync(argvPath, widgetName)
+ runBuild()
+ } else {
+ // 鎵撳寘澶氱粍浠讹紝鎸塁PU榛樿骞惰搴︽墦鍖�
+ const buildWidgets = divideArray(widgetNames)
+ const slashPath = slash(path.resolve(process.cwd(), baseBuildFile))
+ ensureFileSync(slashPath)
+ writeFileSync(slashPath, JSON.stringify(buildWidgets, null, 2))
+ buildSumCount = 0
+ buildCount = 0
+ for (let index = 0; index < Object.keys(buildWidgets).length; index++) {
+ const widgets = buildWidgets[index]
+ if (widgets.length) {
+ buildSumCount++
+ runBuild(index)
+ }
+ }
+ console.log(buildWidgets)
+ }
+}
+/**
+ * 鑾峰彇绛夊垎鐨勭粍浠舵暟鎹�
+ * @param {*} widgets
+ * @param {*} cpus
+ * @returns
+ */
+function divideArray(widgets) {
+ // 褰撴墦鍖呮椂锛屾搷浣滅數鑴戝彲鑳戒細鍗�
+ const cpus = os.availableParallelism() > 1 ? os.availableParallelism() - 1 : 1
+ let result = {}
+ let dataPerKey = Math.floor(widgets.length / cpus)
+ let remainingData = widgets.length
+ for (let i = 0; i < cpus; i++) {
+ let currentDataCount = Math.min(dataPerKey, remainingData)
+ result[i] = widgets.splice(0, currentDataCount)
+ remainingData -= currentDataCount
+ }
+ if (widgets.length) {
+ widgets.forEach((widgetName, index) => {
+ result[index].push(widgetName)
+ })
+ }
+ return result
+}
+/**
+ * 杩愯缂栬瘧
+ * @param {*} nodeIndex 璁剧疆鎵撳寘缁勪欢璧风偣
+ */
+function runBuild(nodeIndex) {
+ const cmdParams = ['run', 'build-lib']
+ const run = crossSpawn(
+ process.platform === 'win32' ? 'npm.cmd' : 'npm',
+ cmdParams,
+ {
+ stdio: 'inherit',
+ shell: true,
+ env: {
+ // 缂栬瘧缁勪欢绱㈠紩鏄犲皠
+ ...process.env,
+ NODE_INDEX: nodeIndex,
+ },
+ }
+ )
+ run.on('close', (code) => {
+ if (code == 0 && isSingleBuild) rmSync(argvPath)
+ })
+}
--
Gitblit v1.9.3