From f3979ff828a0783d61df63742d3c9d194e491ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E9=B8=BF=E5=AE=87?= Date: Fri, 16 May 2025 15:53:14 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=20Node.js=20?= =?UTF-8?q?=E5=92=8C=20Electron=20=E7=9A=84=E9=95=9C=E5=83=8F=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=EF=BC=8C=E8=B0=83=E6=95=B4=20NODE=5FHOME=20=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史鸿宇 --- build/linux/euler-copilot-web.spec | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/build/linux/euler-copilot-web.spec b/build/linux/euler-copilot-web.spec index dfec1dc..d490b0f 100644 --- a/build/linux/euler-copilot-web.spec +++ b/build/linux/euler-copilot-web.spec @@ -57,9 +57,9 @@ openEuler 智能化解决方案桌面客户端 %build # Extract Node.js version using grep+sed for compatibility NODE_VER=$(grep '"node":' package.json | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | head -1) -NODE_LINK="https://registry.npmmirror.com/-/binary/node/v${NODE_VER}/node-v${NODE_VER}-linux-%{_electron_arch}.tar.xz" +NODE_LINK="https://mirrors.huaweicloud.com/nodejs/v${NODE_VER}/node-v${NODE_VER}-linux-%{_electron_arch}.tar.xz" # Download and install Node.js into a subdirectory -NODE_HOME=/usr/local/node-v${NODE_VER} +NODE_HOME="$PWD/.node-v${NODE_VER}" mkdir -p "$NODE_HOME" curl -sSL "$NODE_LINK" | tar -xJ -C "$NODE_HOME" --strip-components=1 # Set NODE_HOME and update PATH, then test Node.js installation @@ -67,16 +67,14 @@ export NODE_HOME export PATH="$NODE_HOME/bin:$PATH" node -v -# Setup mirrors for Electron -export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" -export ELECTRON_BUILDER_BINARIES_MIRROR="https://npmmirror.com/mirrors/electron-builder-binaries/" - # Setup npm mirror -npm config set registry https://registry.npmmirror.com +npm config set registry https://mirrors.huaweicloud.com/repository/npm/ + +# Setup mirrors for Electron +export ELECTRON_MIRROR="https://mirrors.huaweicloud.com/electron/" # Install pnpm globally -corepack enable -corepack prepare pnpm@latest --activate +npm install -g pnpm pnpm -v # Download Electron binaries to cache directory @@ -89,7 +87,7 @@ if [ ! -d "$CACHE_DIR" ]; then fi # Only download if not already present if [ ! -f "$CACHE_DIR/$PACKAGE_NAME" ]; then - curl -sSL "https://registry.npmmirror.com/-/binary/electron/$ELECTRON_VER/$PACKAGE_NAME" \ + curl -sSL "https://mirrors.huaweicloud.com/electron/$ELECTRON_VER/$PACKAGE_NAME" \ -o "$CACHE_DIR/$PACKAGE_NAME" fi -- Gitee From 780aaf324f0f57656f225a902f4cbf731cdccce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E9=B8=BF=E5=AE=87?= Date: Fri, 16 May 2025 17:20:46 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E4=BE=9D=E8=B5=96=E5=87=86=E5=A4=87=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=B9=B6=E6=9B=B4=E6=96=B0=20spec=20=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81=E7=A6=BB=E7=BA=BF=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=20RPM=20=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史鸿宇 --- build/linux/euler-copilot-web.spec | 14 +++++++++- build/scripts/build_rpm.sh | 10 +++++++ build/scripts/prepare_node_modules_offline.sh | 28 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 build/scripts/prepare_node_modules_offline.sh diff --git a/build/linux/euler-copilot-web.spec b/build/linux/euler-copilot-web.spec index d490b0f..98f02ea 100644 --- a/build/linux/euler-copilot-web.spec +++ b/build/linux/euler-copilot-web.spec @@ -23,6 +23,8 @@ License: MulanPSL-2.0 Group: Applications/Utilities Summary: openEuler 智能化解决方案 Web 前端 Source0: %{name}-%{version}.tar.gz +Source1: offline_node_modules.tar.gz +Source2: offline_pnpm_store.tar.gz URL: https://gitee.com/openeuler/euler-copilot-web Vendor: openEuler @@ -91,8 +93,18 @@ if [ ! -f "$CACHE_DIR/$PACKAGE_NAME" ]; then -o "$CACHE_DIR/$PACKAGE_NAME" fi +# 解压离线 node_modules 和 pnpm store +if [ -f %{_sourcedir}/offline_pnpm_store.tar.gz]; then + mkdir -p ~/.pnpm-store + tar -xzf %{_sourcedir}/offline_pnpm_store.tar.gz -C ~/.pnpm-store +fi + +if [ -f %{_sourcedir}/offline_node_modules.tar.gz ]; then + tar -xzf %{_sourcedir}/offline_node_modules.tar.gz +fi + # Install pnpm packages -pnpm install +# pnpm install --offline # Build the app pnpm run package:linux diff --git a/build/scripts/build_rpm.sh b/build/scripts/build_rpm.sh index 3ede947..3494d7f 100755 --- a/build/scripts/build_rpm.sh +++ b/build/scripts/build_rpm.sh @@ -34,6 +34,12 @@ if [ ! -f "${tarball_path}" ]; then bash "${SCRIPT_DIR}/package_repository.sh" fi +# 1.5 准备离线 node 依赖 +if [ ! -f "${PROJECT_ROOT}/release/offline_node_modules.tar.gz" ] || [ ! -f "${PROJECT_ROOT}/release/offline_pnpm_store.tar.gz" ]; then + echo "生成离线依赖..." + bash "${SCRIPT_DIR}/prepare_node_modules_offline.sh" +fi + # 2. 初始化 rpmbuild 目录到 release 目录 RPMBUILD_DIR="${RELEASE_DIR}/rpmbuild" mkdir -p "${RPMBUILD_DIR}"/{BUILD,RPMS,SOURCES,SPECS,SRPMS} @@ -42,6 +48,10 @@ mkdir -p "${RPMBUILD_DIR}"/{BUILD,RPMS,SOURCES,SPECS,SRPMS} cp "${SPEC}" "${RPMBUILD_DIR}/SPECS/" cp "${tarball_path}" "${RPMBUILD_DIR}/SOURCES/" +# 3.5 复制离线依赖包到 SOURCES +cp "${RELEASE_DIR}/offline_node_modules.tar.gz" "${RPMBUILD_DIR}/SOURCES/" +cp "${RELEASE_DIR}/offline_pnpm_store.tar.gz" "${RPMBUILD_DIR}/SOURCES/" + # 4. 执行 rpmbuild echo "开始构建 RPM 包..." rpmbuild --define "_topdir ${RPMBUILD_DIR}" -ba "${RPMBUILD_DIR}/SPECS/$(basename "${SPEC}")" diff --git a/build/scripts/prepare_node_modules_offline.sh b/build/scripts/prepare_node_modules_offline.sh new file mode 100644 index 0000000..d82de2a --- /dev/null +++ b/build/scripts/prepare_node_modules_offline.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# build/scripts/prepare_node_modules_offline.sh +# 用于在有网环境下准备 node_modules 和 pnpm 缓存,实现离线安装 +# 用法:在有网环境下运行一次,生成 release/offline_node_modules.tar.gz 和 release/offline_pnpm_store.tar.gz + +set -e + +WORKDIR=$(cd "$(dirname "$0")/../.." && pwd) +cd "$WORKDIR" + +RELEASE_DIR="$WORKDIR/release" +mkdir -p "$RELEASE_DIR" + +# 1. 安装依赖 +pnpm install + +# 2. 打包 node_modules +if [ -d node_modules ]; then + tar -czf "$RELEASE_DIR/offline_node_modules.tar.gz" node_modules +fi + +# 3. 查找 pnpm store 路径 +PNPM_STORE=$(pnpm store path) +if [ -d "$PNPM_STORE" ]; then + tar -czf "$RELEASE_DIR/offline_pnpm_store.tar.gz" -C "$PNPM_STORE" . +fi + +echo "已生成 $RELEASE_DIR/offline_node_modules.tar.gz 和 $RELEASE_DIR/offline_pnpm_store.tar.gz,可用于离线环境。" -- Gitee From b6e0d55417edac6d06fffa85e8bf59e7f7a5d6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E9=B8=BF=E5=AE=87?= Date: Mon, 19 May 2025 11:54:02 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=E5=A4=A7=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=86=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史鸿宇 --- build/linux/euler-copilot-web.spec | 31 +++++++++--- build/scripts/build_rpm.sh | 32 +++++++++++-- build/scripts/prepare_node_modules_offline.sh | 48 ++++++++++++++++--- 3 files changed, 93 insertions(+), 18 deletions(-) mode change 100644 => 100755 build/scripts/prepare_node_modules_offline.sh diff --git a/build/linux/euler-copilot-web.spec b/build/linux/euler-copilot-web.spec index 98f02ea..885cace 100644 --- a/build/linux/euler-copilot-web.spec +++ b/build/linux/euler-copilot-web.spec @@ -23,8 +23,14 @@ License: MulanPSL-2.0 Group: Applications/Utilities Summary: openEuler 智能化解决方案 Web 前端 Source0: %{name}-%{version}.tar.gz -Source1: offline_node_modules.tar.gz -Source2: offline_pnpm_store.tar.gz +Source1: offline_node_modules-%{_electron_arch}.tar.gz.part0 +Source2: offline_node_modules-%{_electron_arch}.tar.gz.part1 +Source3: offline_node_modules-%{_electron_arch}.tar.gz.part2 +Source4: offline_node_modules-%{_electron_arch}.tar.gz.part3 +Source5: offline_pnpm_store-%{_electron_arch}.tar.gz.part0 +Source6: offline_pnpm_store-%{_electron_arch}.tar.gz.part1 +Source7: offline_pnpm_store-%{_electron_arch}.tar.gz.part2 +Source8: offline_pnpm_store-%{_electron_arch}.tar.gz.part3 URL: https://gitee.com/openeuler/euler-copilot-web Vendor: openEuler @@ -93,14 +99,25 @@ if [ ! -f "$CACHE_DIR/$PACKAGE_NAME" ]; then -o "$CACHE_DIR/$PACKAGE_NAME" fi -# 解压离线 node_modules 和 pnpm store -if [ -f %{_sourcedir}/offline_pnpm_store.tar.gz]; then +# 合并并解压离线 node_modules 和 pnpm store +cat %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part0 \ + %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part1 \ + %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part2 \ + %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part3 \ + > offline_node_modules-%{_electron_arch}.tar.gz +cat %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part0 \ + %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part1 \ + %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part2 \ + %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part3 \ + > offline_pnpm_store-%{_electron_arch}.tar.gz + +if [ -f offline_pnpm_store-%{_electron_arch}.tar.gz ]; then mkdir -p ~/.pnpm-store - tar -xzf %{_sourcedir}/offline_pnpm_store.tar.gz -C ~/.pnpm-store + tar -xzf offline_pnpm_store-%{_electron_arch}.tar.gz -C ~/.pnpm-store fi -if [ -f %{_sourcedir}/offline_node_modules.tar.gz ]; then - tar -xzf %{_sourcedir}/offline_node_modules.tar.gz +if [ -f offline_node_modules-%{_electron_arch}.tar.gz ]; then + tar -xzf offline_node_modules-%{_electron_arch}.tar.gz fi # Install pnpm packages diff --git a/build/scripts/build_rpm.sh b/build/scripts/build_rpm.sh index 3494d7f..00ed5c1 100755 --- a/build/scripts/build_rpm.sh +++ b/build/scripts/build_rpm.sh @@ -34,8 +34,24 @@ if [ ! -f "${tarball_path}" ]; then bash "${SCRIPT_DIR}/package_repository.sh" fi -# 1.5 准备离线 node 依赖 -if [ ! -f "${PROJECT_ROOT}/release/offline_node_modules.tar.gz" ] || [ ! -f "${PROJECT_ROOT}/release/offline_pnpm_store.tar.gz" ]; then +# 1.5 检测架构并准备离线 node 依赖 +ARCH=$(uname -m) +if [[ "$ARCH" == "x86_64" ]]; then + ARCH_SUFFIX="x64" +elif [[ "$ARCH" == "aarch64" ]]; then + ARCH_SUFFIX="arm64" +else + echo "不支持的架构: $ARCH" >&2 + exit 2 +fi +# 检查分块文件是否存在,不存在则生成 +NEED_GEN=0 +for i in 0 1 2 3; do + if [ ! -f "${RELEASE_DIR}/offline_node_modules-${ARCH_SUFFIX}.tar.gz.part${i}" ] || [ ! -f "${RELEASE_DIR}/offline_pnpm_store-${ARCH_SUFFIX}.tar.gz.part${i}" ]; then + NEED_GEN=1 + fi +done +if [ "$NEED_GEN" -eq 1 ]; then echo "生成离线依赖..." bash "${SCRIPT_DIR}/prepare_node_modules_offline.sh" fi @@ -48,12 +64,18 @@ mkdir -p "${RPMBUILD_DIR}"/{BUILD,RPMS,SOURCES,SPECS,SRPMS} cp "${SPEC}" "${RPMBUILD_DIR}/SPECS/" cp "${tarball_path}" "${RPMBUILD_DIR}/SOURCES/" -# 3.5 复制离线依赖包到 SOURCES -cp "${RELEASE_DIR}/offline_node_modules.tar.gz" "${RPMBUILD_DIR}/SOURCES/" -cp "${RELEASE_DIR}/offline_pnpm_store.tar.gz" "${RPMBUILD_DIR}/SOURCES/" +# 3.5 复制离线依赖包分块到 SOURCES +for i in 0 1 2 3; do + cp "${RELEASE_DIR}/offline_node_modules-${ARCH_SUFFIX}.tar.gz.part${i}" "${RPMBUILD_DIR}/SOURCES/" + cp "${RELEASE_DIR}/offline_pnpm_store-${ARCH_SUFFIX}.tar.gz.part${i}" "${RPMBUILD_DIR}/SOURCES/" +done # 4. 执行 rpmbuild echo "开始构建 RPM 包..." rpmbuild --define "_topdir ${RPMBUILD_DIR}" -ba "${RPMBUILD_DIR}/SPECS/$(basename "${SPEC}")" echo "RPM 包构建完成,输出在 ${RPMBUILD_DIR}/RPMS 和 ${RPMBUILD_DIR}/SRPMS" + +# 移动构建好的 rpm 包到 release 目录 +find "${RPMBUILD_DIR}/RPMS" -type f -name '*.rpm' -exec cp -f {} "${RELEASE_DIR}/" \; +echo "所有 RPM 包已移动到 ${RELEASE_DIR}" diff --git a/build/scripts/prepare_node_modules_offline.sh b/build/scripts/prepare_node_modules_offline.sh old mode 100644 new mode 100755 index d82de2a..29cd514 --- a/build/scripts/prepare_node_modules_offline.sh +++ b/build/scripts/prepare_node_modules_offline.sh @@ -11,18 +11,54 @@ cd "$WORKDIR" RELEASE_DIR="$WORKDIR/release" mkdir -p "$RELEASE_DIR" -# 1. 安装依赖 +# 0. 确保已安装 pnpm +if ! command -v pnpm >/dev/null 2>&1; then + echo "未检测到 pnpm,正在全局安装..." + npm install -g pnpm +fi +pnpm -v + +# 1. 检测架构 +ARCH=$(uname -m) +if [[ "$ARCH" == "x86_64" ]]; then + ARCH_SUFFIX="x64" +elif [[ "$ARCH" == "aarch64" ]]; then + ARCH_SUFFIX="arm64" +else + echo "不支持的架构: $ARCH" >&2 + exit 2 +fi + +# 2. 在 RELEASE_DIR 下创建快照缓存目录 +CACHE_DIR="$RELEASE_DIR/offline_build_cache_$ARCH_SUFFIX" +rm -rf "$CACHE_DIR" +mkdir -p "$CACHE_DIR" + +# 3. 拷贝当前代码仓内容到缓存目录(排除 .git、release、node_modules、pnpm-lock.yaml) +rsync -a --exclude='.git' --exclude='release' --exclude='node_modules' --exclude='pnpm-lock.yaml' ./ "$CACHE_DIR/" +cd "$CACHE_DIR" + +# 3. 安装依赖 pnpm install -# 2. 打包 node_modules +# 4. 打包 node_modules 及 pnpm-lock.yaml,并分割为4个分块 if [ -d node_modules ]; then - tar -czf "$RELEASE_DIR/offline_node_modules.tar.gz" node_modules + if [ -f pnpm-lock.yaml ]; then + tar -czf "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" node_modules pnpm-lock.yaml + else + tar -czf "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" node_modules + fi + # 分割为4个分块 + split -d -n 4 -a 1 "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz.part" + rm -f "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" fi -# 3. 查找 pnpm store 路径 +# 5. 查找 pnpm store 路径,并分割为4个分块 PNPM_STORE=$(pnpm store path) if [ -d "$PNPM_STORE" ]; then - tar -czf "$RELEASE_DIR/offline_pnpm_store.tar.gz" -C "$PNPM_STORE" . + tar -czf "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz" -C "$PNPM_STORE" . + split -d -n 4 -a 1 "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz" "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz.part" + rm -f "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz" fi -echo "已生成 $RELEASE_DIR/offline_node_modules.tar.gz 和 $RELEASE_DIR/offline_pnpm_store.tar.gz,可用于离线环境。" +echo "已生成 offline_node_modules-$ARCH_SUFFIX.tar.gz.part[0-3] 和 offline_pnpm_store-$ARCH_SUFFIX.tar.gz.part[0-3],可用于离线环境。" -- Gitee From deeb430e15d8d1948a269eb73942ceb78a3c262a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E9=B8=BF=E5=AE=87?= Date: Mon, 19 May 2025 15:25:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E4=BE=9D=E8=B5=96=E6=89=93=E5=8C=85=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E4=B8=BA=20zst=EF=BC=8C=E5=87=8F=E5=B0=8F=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=8C=85=E4=BD=93=E7=A7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史鸿宇 --- build/linux/euler-copilot-web.spec | 39 +++++++------------ build/scripts/build_rpm.sh | 7 ++-- build/scripts/prepare_node_modules_offline.sh | 19 +++------ 3 files changed, 21 insertions(+), 44 deletions(-) diff --git a/build/linux/euler-copilot-web.spec b/build/linux/euler-copilot-web.spec index 885cace..56979ee 100644 --- a/build/linux/euler-copilot-web.spec +++ b/build/linux/euler-copilot-web.spec @@ -23,20 +23,17 @@ License: MulanPSL-2.0 Group: Applications/Utilities Summary: openEuler 智能化解决方案 Web 前端 Source0: %{name}-%{version}.tar.gz -Source1: offline_node_modules-%{_electron_arch}.tar.gz.part0 -Source2: offline_node_modules-%{_electron_arch}.tar.gz.part1 -Source3: offline_node_modules-%{_electron_arch}.tar.gz.part2 -Source4: offline_node_modules-%{_electron_arch}.tar.gz.part3 -Source5: offline_pnpm_store-%{_electron_arch}.tar.gz.part0 -Source6: offline_pnpm_store-%{_electron_arch}.tar.gz.part1 -Source7: offline_pnpm_store-%{_electron_arch}.tar.gz.part2 -Source8: offline_pnpm_store-%{_electron_arch}.tar.gz.part3 +Source1: offline_node_modules-%{_electron_arch}.tar.zst.part0 +Source2: offline_node_modules-%{_electron_arch}.tar.zst.part1 +Source3: offline_node_modules-%{_electron_arch}.tar.zst.part2 +Source4: offline_node_modules-%{_electron_arch}.tar.zst.part3 URL: https://gitee.com/openeuler/euler-copilot-web Vendor: openEuler Packager: openEuler BuildRequires: curl +BuildRequires: zstd %description openEuler 智能化解决方案 Web 前端 @@ -99,25 +96,15 @@ if [ ! -f "$CACHE_DIR/$PACKAGE_NAME" ]; then -o "$CACHE_DIR/$PACKAGE_NAME" fi -# 合并并解压离线 node_modules 和 pnpm store -cat %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part0 \ - %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part1 \ - %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part2 \ - %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.gz.part3 \ - > offline_node_modules-%{_electron_arch}.tar.gz -cat %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part0 \ - %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part1 \ - %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part2 \ - %{_sourcedir}/offline_pnpm_store-%{_electron_arch}.tar.gz.part3 \ - > offline_pnpm_store-%{_electron_arch}.tar.gz - -if [ -f offline_pnpm_store-%{_electron_arch}.tar.gz ]; then - mkdir -p ~/.pnpm-store - tar -xzf offline_pnpm_store-%{_electron_arch}.tar.gz -C ~/.pnpm-store -fi +# 合并并解压离线 node_modules +cat %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.zst.part0 \ + %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.zst.part1 \ + %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.zst.part2 \ + %{_sourcedir}/offline_node_modules-%{_electron_arch}.tar.zst.part3 \ + > offline_node_modules-%{_electron_arch}.tar.zst -if [ -f offline_node_modules-%{_electron_arch}.tar.gz ]; then - tar -xzf offline_node_modules-%{_electron_arch}.tar.gz +if [ -f offline_node_modules-%{_electron_arch}.tar.zst ]; then + zstd -d offline_node_modules-%{_electron_arch}.tar.zst -c | tar -xf - fi # Install pnpm packages diff --git a/build/scripts/build_rpm.sh b/build/scripts/build_rpm.sh index 00ed5c1..f7dffaf 100755 --- a/build/scripts/build_rpm.sh +++ b/build/scripts/build_rpm.sh @@ -44,10 +44,10 @@ else echo "不支持的架构: $ARCH" >&2 exit 2 fi -# 检查分块文件是否存在,不存在则生成 +# 检查 node_modules 分块文件是否存在,不存在则生成 NEED_GEN=0 for i in 0 1 2 3; do - if [ ! -f "${RELEASE_DIR}/offline_node_modules-${ARCH_SUFFIX}.tar.gz.part${i}" ] || [ ! -f "${RELEASE_DIR}/offline_pnpm_store-${ARCH_SUFFIX}.tar.gz.part${i}" ]; then + if [ ! -f "${RELEASE_DIR}/offline_node_modules-${ARCH_SUFFIX}.tar.zst.part${i}" ]; then NEED_GEN=1 fi done @@ -66,8 +66,7 @@ cp "${tarball_path}" "${RPMBUILD_DIR}/SOURCES/" # 3.5 复制离线依赖包分块到 SOURCES for i in 0 1 2 3; do - cp "${RELEASE_DIR}/offline_node_modules-${ARCH_SUFFIX}.tar.gz.part${i}" "${RPMBUILD_DIR}/SOURCES/" - cp "${RELEASE_DIR}/offline_pnpm_store-${ARCH_SUFFIX}.tar.gz.part${i}" "${RPMBUILD_DIR}/SOURCES/" + cp "${RELEASE_DIR}/offline_node_modules-${ARCH_SUFFIX}.tar.zst.part${i}" "${RPMBUILD_DIR}/SOURCES/" done # 4. 执行 rpmbuild diff --git a/build/scripts/prepare_node_modules_offline.sh b/build/scripts/prepare_node_modules_offline.sh index 29cd514..4f3d96b 100755 --- a/build/scripts/prepare_node_modules_offline.sh +++ b/build/scripts/prepare_node_modules_offline.sh @@ -16,7 +16,6 @@ if ! command -v pnpm >/dev/null 2>&1; then echo "未检测到 pnpm,正在全局安装..." npm install -g pnpm fi -pnpm -v # 1. 检测架构 ARCH=$(uname -m) @@ -44,21 +43,13 @@ pnpm install # 4. 打包 node_modules 及 pnpm-lock.yaml,并分割为4个分块 if [ -d node_modules ]; then if [ -f pnpm-lock.yaml ]; then - tar -czf "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" node_modules pnpm-lock.yaml + tar -cf - node_modules pnpm-lock.yaml | zstd -19 -T0 -o "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.zst" else - tar -czf "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" node_modules + tar -cf - node_modules | zstd -19 -T0 -o "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.zst" fi # 分割为4个分块 - split -d -n 4 -a 1 "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz.part" - rm -f "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.gz" + split -d -n 4 -a 1 "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.zst" "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.zst.part" + rm -f "$RELEASE_DIR/offline_node_modules-$ARCH_SUFFIX.tar.zst" fi -# 5. 查找 pnpm store 路径,并分割为4个分块 -PNPM_STORE=$(pnpm store path) -if [ -d "$PNPM_STORE" ]; then - tar -czf "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz" -C "$PNPM_STORE" . - split -d -n 4 -a 1 "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz" "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz.part" - rm -f "$RELEASE_DIR/offline_pnpm_store-$ARCH_SUFFIX.tar.gz" -fi - -echo "已生成 offline_node_modules-$ARCH_SUFFIX.tar.gz.part[0-3] 和 offline_pnpm_store-$ARCH_SUFFIX.tar.gz.part[0-3],可用于离线环境。" +echo "已生成 offline_node_modules-$ARCH_SUFFIX.tar.zst.part[0-3],可用于离线环境。" -- Gitee