You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分并管理单个package.json中的多Angular项目构建命令?

解决方案

步骤1:创建独立的构建命令配置文件

在项目根目录新建build-configs.json,将所有项目的构建规则结构化存储,按项目分组管理不同环境的配置:

{
  "projects": {
    "project1": {
      "tenant1": {
        "command": "ng build --project=project1 -c=tenant1-dev --watch=true"
      },
      "tenant2": {
        "command": "ng build --project=project1 -c=tenant2-dev --watch=true"
      },
      "tenant3": {
        "command": "ng build --project=project1 -c=tenant3-dev --watch=true"
      },
      "tenant1-ci": {
        "command": "ng build --project=project1 -c=tenant1-ci"
      },
      "tenant2-ci": {
        "command": "ng build --project=project1 -c=tenant2-ci"
      },
      "tenant3-ci": {
        "command": "ng build --project=project1 -c=tenant3-ci"
      },
      "test": {
        "command": "ng build --project=project1 -c=tenant1 --watch=true"
      }
    },
    "project38": {
      "tenant1": {
        "command": "ng build --project=project38 -c=tenant1-dev --watch=true"
      },
      "tenant2": {
        "command": "ng build --project=project38 -c=tenant2-dev --watch=true"
      },
      "tenant3": {
        "command": "ng build --project=project38 -c=tenant3-dev --watch=true"
      },
      "tenant1-ci": {
        "command": "ng build --project=project38 -c=tenant1-ci"
      },
      "tenant2-ci": {
        "command": "ng build --project=project38 -c=tenant2-ci"
      },
      "tenant3-ci": {
        "command": "ng build --project=project38 -c=tenant3-ci"
      },
      "test": {
        "command": "ng build --project=project38 -c=tenant1 --watch=true"
      }
    }
  }
}

步骤2:编写Node.js执行脚本

新建run-build.js,负责读取配置文件、解析命令行参数并执行对应构建命令:

const fs = require('fs');
const { execSync } = require('child_process');

// 读取构建配置
const config = JSON.parse(fs.readFileSync('./build-configs.json', 'utf8'));

// 获取命令行传入的项目名和环境标识
const [project, env] = process.argv.slice(2);

// 参数校验
if (!project || !env) {
  console.error('请按格式执行:npm run build <项目名> <环境标识>');
  console.error('示例:npm run build project1 tenant1');
  process.exit(1);
}

// 匹配目标构建命令
const targetCommand = config.projects[project]?.[env]?.command;

if (!targetCommand) {
  console.error(`未找到项目${project}的${env}环境构建配置`);
  process.exit(1);
}

// 执行构建命令
try {
  execSync(targetCommand, { stdio: 'inherit' });
} catch (err) {
  console.error('构建失败:', err.message);
  process.exit(1);
}

步骤3:简化package.json的scripts

替换原有240+条脚本,只保留一条通用构建命令:

{
  "name": "myangular project",
  "version": "1.0.0",
  "scripts": {
    "build": "node run-build.js"
  },
  "private": true,
  "devDependencies": {},
  "dependencies": {}
}

步骤4:执行构建命令

现在只需通过以下格式即可执行任意项目的构建:

npm run build project1 tenant1
npm run build project38 tenant2-ci
npm run build project1 test

可选优化:添加命令补全

如果使用bash/zsh终端,可添加补全脚本提升操作效率。新建build-completion.sh:

_build_completion() {
  local config=$(cat ./build-configs.json)
  local projects=$(echo "$config" | jq -r '.projects | keys[]')
  local cur=${COMP_WORDS[COMP_CWORD]}
  local prev=${COMP_WORDS[COMP_CWORD-1]}

  if [ $COMP_CWORD -eq 2 ]; then
    COMPREPLY=($(compgen -W "$projects" -- "$cur"))
  elif [ $COMP_CWORD -eq 3 ]; then
    local envs=$(echo "$config" | jq -r ".projects.$prev | keys[]")
    COMPREPLY=($(compgen -W "$envs" -- "$cur"))
  fi
}

complete -F _build_completion npm

将脚本路径添加到shell配置文件(~/.bashrc或~/.zshrc)中,即可在输入npm run build 后按Tab键补全项目名和环境标识。


内容的提问来源于stack exchange,提问作者Mona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:30:13