diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md index e68a29b0b3fdf3..43c2a57aa5ef3b 100644 --- a/doc/languages-frameworks/javascript.section.md +++ b/doc/languages-frameworks/javascript.section.md @@ -476,6 +476,12 @@ pnpmDeps = pnpm.fetchDeps { The above would make `pnpm.fetchDeps` call only install dependencies for the `@astrojs/language-server` workspace package. Note that you do not need to set `sourceRoot` to make this work. +If you need to install packages for multiple workspaces, pass a list of workspaces to `pnpmWorkspaces`: + +```nix +pnpmWorkspaces = ["@atproto/pds" "@atproto/did"] +``` + Usually in such cases, you'd want to use `pnpm --filter=$pnpmWorkspace build` to build your project, as `npmHooks.npmBuildHook` probably won't work. A `buildPhase` based on the following example will probably fit most workspace projects: ```nix diff --git a/pkgs/development/tools/pnpm/fetch-deps/default.nix b/pkgs/development/tools/pnpm/fetch-deps/default.nix index d891600644069e..264c79716cb34c 100644 --- a/pkgs/development/tools/pnpm/fetch-deps/default.nix +++ b/pkgs/development/tools/pnpm/fetch-deps/default.nix @@ -16,7 +16,9 @@ hash ? "", pname, pnpmWorkspace ? "", + pnpmWorkspaces ? [ ], prePnpmInstall ? "", + pnpmInstallFlags ? [ ], ... }@args: let @@ -32,7 +34,9 @@ outputHash = ""; outputHashAlgo = "sha256"; }; - installFlags = lib.optionalString (pnpmWorkspace != "") "--filter=${pnpmWorkspace}"; + filterFlags = + lib.optional (pnpmWorkspace != "") "--filter=${pnpmWorkspace}" + ++ lib.map (package: "--filter=${package}") pnpmWorkspaces; in stdenvNoCC.mkDerivation ( finalAttrs: @@ -73,7 +77,8 @@ pnpm install \ --force \ --ignore-scripts \ - ${installFlags} \ + ${lib.escapeShellArgs filterFlags} \ + ${lib.escapeShellArgs pnpmInstallFlags} \ --frozen-lockfile runHook postInstall diff --git a/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh b/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh index e82a62f9101cdc..3e73f78506d3bb 100644 --- a/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh +++ b/pkgs/development/tools/pnpm/fetch-deps/pnpm-config-hook.sh @@ -27,6 +27,14 @@ pnpmConfigHook() { if [[ -n "$pnpmWorkspace" ]]; then pnpmInstallFlags+=("--filter=$pnpmWorkspace") fi + + if [[ -n "$pnpmWorkspaces" ]]; then + local IFS=" " + for ws in $pnpmWorkspaces; do + pnpmInstallFlags+=("--filter=$ws") + done + fi + runHook prePnpmInstall pnpm install \