From 55bf797dcc730b37bc691ebab2b51ff9db8ed245 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周二, 06 5月 2025 17:37:23 +0800
Subject: [PATCH] 修改代码样式

---
 HIAWms/web/script/build.js |   99 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 87 insertions(+), 12 deletions(-)

diff --git a/HIAWms/web/script/build.js b/HIAWms/web/script/build.js
index 82013b5..c9db6a3 100644
--- a/HIAWms/web/script/build.js
+++ b/HIAWms/web/script/build.js
@@ -1,8 +1,10 @@
-const { writeFileSync, rmSync } = require('fs')
-const { spawn } = require('node:child_process')
+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'
@@ -20,15 +22,88 @@
   writeFileSync(argvPath, widgetName)
 }
 
-const run = spawn(process.platform === 'win32' ? 'npm.cmd' : 'npm', [
-  'run',
-  'build-lib',
-])
+buildWidgets()
 
-run.stdout.on('data', (data) => console.info(data.toString('utf8')))
+function buildWidgets() {
+  const isWin = process.platform === 'win32'
+  const argv = process.argv || []
 
-run.stderr.on('data', (data) => console.info(data.toString('utf8')))
+  const widgetName = argv[argv.length - 1]
 
-run.on('close', (code) => {
-  if (code == 0 && isSingleBuild) rmSync(argvPath)
-})
+  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