用途:在带 virtiofs 挂载工作区的 Docker 沙箱中安全安装 npm 依赖。因 aarch64 上从 virtiofs 执行原生 Go/Rust 二进制(esbuild、lightningcss、rollup 等)会因 mmap 对齐失败而崩溃,需将依赖装到容器本地 ext4 文件系统再软链回工作区。
前置条件:Docker 沙箱环境与 virtiofs 挂载工作区;容器内有 Node.js 与 npm;目标工作区存在 package.json。
使用方式:在工作区根目录运行 bash scripts/install.sh。可选参数:--workspace <path> 指定含 package.json 的目录(省略时自动检测);--playwright 同时安装 Playwright Chromium 浏览器用于 E2E 测试。
脚本行为:复制 package.json、package-lock.json 和 .npmrc(若存在)到本地 ext4 目录;在本地文件系统运行 npm ci(无锁文件时用 npm install);将 node_modules 软链回工作区;校验 esbuild、rollup、lightningcss、vite 等已知原生二进制(若存在);可选安装 Playwright 浏览器及系统依赖(有 sudo 时使用)。若校验失败可重跑,初次安装崩溃可能间歇出现。
安装后验证示例:npm test、npm run build、npm run dev。
限制与注意:本地安装目录(如 /home/agent/project-deps)为容器本地,不同步回宿主机;软链在宿主机显示为断链但无害;在宿主机运行 npm ci 或 npm install 会自然替换该软链;任一 package.json 或 package-lock.json 变更后需重跑脚本;请勿直接在挂载工作区运行 npm ci 或 npm install,否则原生二进制会崩溃。
排障:dev server 出现 SIGILL/SIGSEGV 时重跑脚本并避免在工作区直接安装;安装后找不到 node_modules 时用 ls -la node_modules 检查软链;权限错误时确保本地依赖目录对当前用户可写;校验间歇失败可重跑。
Vite 兼容:若项目使用 Vite,可能需在 server.fs.allow 中加入软链目标父目录(如 /home/agent/project-deps/)以便通过软链提供文件。