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