rushstack-best-practices

作者: microsoft

提供使用 Rush 单体仓库的最佳实践和指导。当用户在基于 Rush 的仓库中工作、询问 Rush 命令时使用…

npx skills add https://github.com/microsoft/rushstack --skill rushstack-best-practices

Rushstack Best Practices

This skill provides essential best practices for working with Rush monorepos. Following these guidelines ensures efficient dependency management, optimal build performance, and proper command usage.

Important Guidelines

When encountering unclear issues or questions:

  1. Never make assumptions - If unsure about Rush behavior, configuration, or commands
  2. Search official resources first - Check documentation and existing issues before guessing
  3. Provide accurate information - Base responses on verified sources, not assumptions
  4. Ask for clarification - When the problem description is ambiguous or incomplete

Core Principles

  1. Always use Rush commands - Avoid npm/pnpm/yarn directly in a Rush monorepo
  2. Use rushx for single projects - Like npm run, but Rush-aware
  3. rush install vs update - install for CI, update after changes
  4. rush build vs rebuild - build for incremental, rebuild for clean
  5. Projects at 2 levels - Standard: apps/, libraries/, tools/
  6. Selection flags reduce scope - Use --to, --from, --impacted-by
  7. Build cache is automatic - Configure output folders to enable
  8. Subspace for large repos - Isolate dependencies when needed

Project Selection Best Practices

When running commands like install, update, build, rebuild, etc., by default all projects under the entire repository are processed. Use these selection flags to improve efficiency:

--to

Select specified project and all its dependencies.

  • Build specific project and its dependencies
  • Ensure complete dependency chain build
rush build --to @my-company/my-project
rush build --to my-project  # If project name is unique
rush build --to .            # Use current directory's project

--to-except

Select all dependencies of specified project, but not the project itself.

  • Update project dependencies without processing project itself
  • Pre-build dependencies
rush build --to-except @my-company/my-project

--from

Select specified project and all its downstream dependencies.

  • Validate changes' impact on downstream projects
  • Build all projects affected by specific project
rush build --from @my-company/my-library

--impacted-by

Select projects that might be affected by specified project changes, excluding dependencies.

  • Quick test of project change impacts
  • Use when dependency status is already correct
rush build --impacted-by @my-company/my-library

--impacted-by-except

Similar to --impacted-by, but excludes specified project itself.

  • Project itself has been manually built
  • Only need to test downstream impacts
rush build --impacted-by-except @my-company/my-library

--only

Only select specified project, completely ignore dependency relationships.

  • Dependency status is known to be correct
  • Combine with other selection parameters
rush build --only @my-company/my-project
rush build --impacted-by projectA --only projectB

Command Usage Guidelines

Command Tool Selection

Choose the correct command tool based on different scenarios:

  1. rush command - Execute operations affecting the entire repository or multiple projects

    • Strict parameter validation and documentation
    • Support for global and batch commands
    • Suitable for standardized workflows
    • Use cases: Dependency installation, building, publishing
  2. rushx command - Execute specific scripts for a single project

    • Similar to npm run or pnpm run
    • Uses Rush version selector for toolchain consistency
    • Prepares shell environment based on Rush configuration
    • Use cases: Running project-specific build scripts, tests, dev servers
  3. rush-pnpm command - Replace direct use of pnpm in Rush repository

    • Sets correct PNPM workspace context
    • Supports Rush-specific enhancements
    • Provides compatibility checks with Rush
    • Use cases: When direct PNPM commands are needed

Install vs Update

CommandBehaviorWhen to Use
rush updateUpdates shrinkwrap, installs new dependenciesAfter cloning, after git pull, after modifying package.json
rush installRead-only install from existing shrinkwrapCI/CD pipelines, ensuring version consistency

Build vs Rebuild

CommandBehaviorWhen to Use
rush buildIncremental build, only changed projectsDaily development, quick validation
rush rebuildClean build all projectsComplete rebuild needed, investigating issues

Dependency Management

Package Manager Selection

Choose in rush.json:

{
  "pnpmVersion": "8.x.x"     // Preferred - efficient, strict
  // "npmVersion": "8.x.x"   // Alternative
  // "yarnVersion": "1.x.x"  // Alternative
}

Version Constraints

Configure in common/config/subspaces/<subspace>/common-versions.json:

{
  "preferredVersions": {
    "react": "17.0.2",
    "typescript": "~4.5.0"
  },
  "implicitlyPreferredVersions": true,
  "allowedAlternativeVersions": {
    "typescript": ["~4.5.0", "~4.6.0"]
  }
}

Adding/Removing Dependencies

Always use Rush commands, not npm/pnpm directly:

rush add -p lodash --dev      # Add dev dependency
rush add -p react --exact     # Add exact version
rush remove -p lodash         # Remove dependency

Build Cache Configuration

Configure in <project>/config/rush-project.json:

{
  "operationSettings": [
    {
      "operationName": "build",
      "outputFolderNames": ["lib", "dist"],
      "disableBuildCacheForOperation": false,
      "dependsOnEnvVars": ["MY_ENV_VAR"]
    }
  ]
}

Cache Behavior:

  • Cache stored in common/temp/build-cache
  • Invalidated by: source changes, dependency changes, env vars, command params
  • Parallel builds supported via enableParallelism

Troubleshooting

Dependency Issues

  • Avoid npm, pnpm, yarn - use Rush commands
  • Run rush purge to clean environment
  • Run rush update --recheck to force dependency check

Build Issues

  • Use rush rebuild to skip cache
  • Check rushx build output for specific errors
  • Use --verbose for detailed logs

Performance Issues

  • Use selection flags (--to, --from, etc.) to reduce scope
  • Enable build cache in rush-project.json
  • Consider subspace for very large monorepos

Subspace for Large Monorepos

What is Subspace:

  • Allows multiple PNPM lock files in one Rush monorepo
  • Enables independent dependency management per team/project group
  • Reduces risk from dependency updates
  • Improves install/update performance

When to Use:

  • Large monorepos (50+ projects)
  • Multiple teams with different dependency needs
  • Conflicting version requirements
  • Need for faster dependency operations

Official Resources

Documentation & References

Official Websites:

Search Existing Issues:

When to Search vs. Ask

Search these resources first when:

  • Encountering error messages
  • Unsure about configuration options
  • Looking for examples or tutorials
  • Need to understand Rush behavior

Ask the user for clarification when:

  • The specific use case is unclear
  • Multiple approaches are possible
  • Context is missing to provide accurate guidance
  • The issue might be environment-specific

Detailed References

For expanded information on specific domains, see:

  • references/core-commands.md - Detailed command reference
  • references/project-configuration.md - Configuration file specifications
  • references/dependency-management.md - Advanced dependency patterns
  • references/build-system.md - Build optimization and caching
  • references/subspace.md - Subspace setup and usage

来自 microsoft 的更多技能

oss-growth
microsoft
OSS增长黑客角色
agent-framework-azure-ai-py
microsoft
使用Microsoft Agent Framework Python SDK(agent-framework-azure-ai)构建Azure AI Foundry代理。在创建使用AzureAIAgentsProvider的持久化代理、使用托管工具(代码解释器、文件搜索、网络搜索)、集成MCP服务器、管理对话线程或实现流式响应时使用。涵盖函数工具、结构化输出和多工具代理。
development
airunway-aks-setup
microsoft
在AKS上设置AI Runway——从裸集群到运行模型。涵盖集群验证、控制器安装、GPU评估、提供商设置和首次部署。适用场景:“设置AI Runway”、“接入AKS集群”、“安装AI Runway”、“airunway设置”、“将模型部署到AKS”、“在AKS上进行GPU推理”、“在AKS上配置KAITO”、“在AKS上运行LLM”、“在AKS上使用vLLM”、“在AKS上设置模型服务”、“AI Runway控制器”。
devops
appinsights-instrumentation
microsoft
使用Azure Application Insights对Web应用进行插桩的指南。提供遥测模式、SDK设置和配置参考。适用场景:如何对应用进行插桩、App Insights SDK、遥测模式、什么是App Insights、Application Insights指南、插桩示例、APM最佳实践。
devops
applicationinsights-web-ts
microsoft
使用Application Insights JavaScript SDK(@microsoft/applicationinsights-web)为浏览器/Web应用添加检测。用于真实用户监控(RUM)——页面视图、点击、AJAX/fetch依赖项、异常、自定义事件,以及与后端OpenTelemetry追踪关联的浏览器端GenAI代理追踪。涵盖SDK加载器脚本和npm设置、框架扩展(React、React Native、Angular)、点击分析、遥测初始化器,以及从浏览器发出的代理/工具/模型跨度所遵循的OTel GenAI语义约定。
devops
azure-ai-anomalydetector-java
microsoft
使用适用于 Java 的 Azure AI 异常检测器 SDK 构建异常检测应用程序。在实现单变量/多变量异常检测、时间序列分析或 AI 驱动的监控时使用。
development
azure-ai-language-conversations-py
microsoft
使用azure-ai-language-conversations Python SDK实现对话语言理解(CLU)。当使用ConversationAnalysisClient分析对话意图和实体、构建NLP功能或将语言理解集成到应用程序中时使用。
development
azure-ai-ml-py
microsoft
Azure Machine Learning SDK v2 for Python。用于机器学习工作区、作业、模型、数据集、计算资源和管道。 触发词:“azure-ai-ml”、“MLClient”、“工作区”、“模型注册表”、“训练作业”、“数据集”。
development