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 | 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