⚠ Deprecated: Legacy
Suggested alternative: CommunityToolkit.Aspire.Hosting.JavaScript.Extensions
A .NET Aspire for hosting NodeJS apps using Vite, Yarn, PNPM, or NPM.
$ dotnet add package CommunityToolkit.Aspire.Hosting.NodeJS.ExtensionsThis integration contains extensions for the Node.js hosting package for Aspire, including support for frontend monorepos (Nx, Turborepo).
In your AppHost project, install the package using the following command:
dotnet add package CommunityToolkit.Aspire.Hosting.NodeJS.Extensions
For Nx and Turborepo monorepos, use the dedicated monorepo methods to avoid package installation race conditions:
// Nx workspace
var nx = builder.AddNxApp("nx", workingDirectory: "../frontend")
.WithYarn()
.RunWithPackageManager(); // Automatically uses yarn from installer
var app1 = nx.AddApp("app1");
var app2 = nx.AddApp("app2", appName: "my-app-2");
// Turborepo workspace
var turbo = builder.AddTurborepoApp("turbo", workingDirectory: "../frontend")
.RunWithPackageManager("pnpm"); // Explicitly specify pnpm
var turboApp1 = turbo.AddApp("app1");
var turboApp2 = turbo.AddApp("app2", filter: "custom-filter");
See MONOREPO.md for detailed documentation on monorepo support.
The RunWithPackageManager() method configures which package manager command is used when running individual apps in Nx or Turborepo workspaces:
// Auto-infer from package installer
var nx = builder.AddNxApp("nx", workingDirectory: "../frontend")
.WithYarn()
.RunWithPackageManager(); // Uses 'yarn' command
// Explicitly specify package manager
var turbo = builder.AddTurborepoApp("turbo", workingDirectory: "../frontend")
.WithPnpm()
.RunWithPackageManager("pnpm"); // Uses 'pnpm' command
// Generated commands:
// Nx with yarn: yarn nx serve app1
// Turborepo with pnpm: pnpm turbo run dev --filter app1
You can pass additional flags to package managers during installation:
// yarn with frozen lockfile
builder.AddYarnApp("yarn-app", "./path/to/app")
.WithYarnPackageInstallation(configureInstaller =>
{
configureInstaller.WithArgs("--frozen-lockfile", "--verbose");
})
.WithExternalHttpEndpoints();
// pnpm with frozen lockfile
builder.AddPnpmApp("pnpm-app", "./path/to/app")
.WithPnpmPackageInstallation(configureInstaller =>
{
configureInstaller.WithArgs("--frozen-lockfile");
})
.WithExternalHttpEndpoints();