rushstack-best-practices

Fournit des bonnes pratiques et des conseils pour travailler avec les monorepos Rush. À utiliser lorsque l'utilisateur travaille dans un dépôt basé sur Rush, pose des questions sur les commandes 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

Plus de skills de microsoft

oss-growth
microsoft
Persona de growth hacker OSS
official
microsoft-foundry
microsoft
Déployer, évaluer et gérer les agents Foundry de bout en bout : build Docker, push ACR, création d’agent hébergé/par prompt, démarrage de conteneur, évaluation par lots, évaluation continue, workflows d’optimisation de prompt, agent.yaml, curation de jeux de données à partir de traces. UTILISER POUR : déployer un agent vers Foundry, agent hébergé, créer un agent, invoquer un agent, évaluer un agent, exécuter une évaluation par lots, évaluation continue, surveillance continue, statut d’évaluation continue, optimiser un prompt, améliorer un prompt, optimiseur de prompt, optimiser les instructions d’un agent, améliorer un agent...
officialdevelopmentdevops
azure-ai
microsoft
Utiliser pour Azure AI : Recherche, Parole, OpenAI, Intelligence documentaire. Aide pour la recherche, la recherche vectorielle/hybride, la reconnaissance vocale, la synthèse vocale, la transcription, l'OCR. QUAND : Recherche AI, recherche par requête, recherche vectorielle, recherche hybride, recherche sémantique, reconnaissance vocale, synthèse vocale, transcrire, OCR, convertir du texte en parole.
officialdevelopmentapi
azure-deploy
microsoft
Exécutez les déploiements Azure pour les applications DÉJÀ PRÉPARÉES disposant de fichiers .azure/deployment-plan.md et d'infrastructure existants. N'utilisez PAS cette compétence lorsque l'utilisateur demande de CRÉER une nouvelle application — utilisez plutôt azure-prepare. Cette compétence exécute les commandes azd up, azd deploy, terraform apply et az deployment avec une récupération d'erreur intégrée. Nécessite .azure/deployment-plan.md de azure-prepare et un état validé de azure-validate. QUAND : "exécuter azd up", "exécuter azd deploy", "exécuter le déploiement",...
officialdevopsaws
azure-storage
microsoft
Services Azure Storage incluant Blob Storage, File Shares, Queue Storage, Table Storage et Data Lake. Répond aux questions sur les niveaux d'accès au stockage (chaud, froid, froid, archive), quand utiliser chaque niveau et comparaison des niveaux. Fournit du stockage d'objets, des partages de fichiers SMB, de la messagerie asynchrone, du NoSQL clé-valeur et de l'analyse de big data. Inclut la gestion du cycle de vie. À UTILISER POUR : stockage blob, partages de fichiers, stockage de files d'attente, stockage de tables, data lake, téléchargement de fichiers, téléchargement de blobs, comptes de stockage, niveaux d'accès,...
officialdevelopmentdatabase
azure-diagnostics
microsoft
Déboguer les problèmes de production Azure à l'aide d'AppLens, Azure Monitor, l'état des ressources et un triage sécurisé. QUAND : déboguer des problèmes de production, résoudre les problèmes d'App Service, CPU élevé d'App Service, échec de déploiement d'App Service, résoudre les problèmes de Container Apps, résoudre les problèmes de Functions, résoudre les problèmes d'AKS, kubectl ne peut pas se connecter, échecs kube-system/CoreDNS, pod en attente, crashloop, nœud non prêt, échecs de mise à niveau, analyser les logs, KQL, insights, échecs de pull d'image, problèmes de démarrage à froid, échecs de sonde de santé,...
officialdevopsdevelopment
azure-prepare
microsoft
Préparer les applications Azure pour le déploiement (infra Bicep/Terraform, azure.yaml, Dockerfiles). Utiliser pour créer/moderniser ou créer+déployer ; pas pour la migration cross-cloud (utiliser azure-cloud-migrate). NE PAS UTILISER POUR : les applications copilot-sdk (utiliser azure-hosted-copilot-sdk). QUAND : "créer une application", "construire une application web", "créer une API", "créer une API HTTP serverless", "créer un frontend", "créer un backend", "construire un service", "moderniser une application", "mettre à jour une application", "ajouter une authentification", "ajouter un cache", "héberger sur Azure", "créer et...
officialdevelopmentdevops
azure-validate
microsoft
Validation pré-déploiement pour la préparation Azure. Effectuez des vérifications approfondies sur la configuration, l'infrastructure (Bicep ou Terraform), les attributions de rôles RBAC, les autorisations d'identité managée et les prérequis avant le déploiement. QUAND : valider mon application, vérifier l'état de préparation au déploiement, exécuter des contrôles préalables, vérifier la configuration, vérifier si prêt à déployer, valider azure.yaml, valider Bicep, tester avant le déploiement, résoudre les erreurs de déploiement, valider Azure Functions, valider l'application de fonction, valider serverless...
officialdevopstesting