about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWout Mertens <Wout.Mertens@gmail.com>2022-09-27 10:17:50 +0200
committerWout Mertens <Wout.Mertens@gmail.com>2023-09-20 10:10:51 +0200
commit724f6bcb774dc5764a760a15b007d4ad0af5c9c0 (patch)
treebffca88890201020125dbe1704b4735d2ebb7272
parent8acedb7656bedb347dc5b6b673fa4c497a8838a1 (diff)
nodejs: corepack wrappers package
-rw-r--r--doc/languages-frameworks/javascript.section.md4
-rw-r--r--pkgs/development/web/nodejs/corepack.nix28
-rw-r--r--pkgs/top-level/all-packages.nix9
3 files changed, 41 insertions, 0 deletions
diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md
index 0a2099b0a6b12..87d9195fd2a18 100644
--- a/doc/languages-frameworks/javascript.section.md
+++ b/doc/languages-frameworks/javascript.section.md
@@ -217,6 +217,10 @@ $ prefetch-npm-deps package-lock.json
 sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
 ```
 
+### corepack {#javascript-corepack}
+
+This package puts the corepack wrappers for npm, pnpm and yarn in your PATH, and they will honor the `packageManager` setting in the `package.json`.
+
 ### node2nix {#javascript-node2nix}
 
 #### Preparation {#javascript-node2nix-preparation}
diff --git a/pkgs/development/web/nodejs/corepack.nix b/pkgs/development/web/nodejs/corepack.nix
new file mode 100644
index 0000000000000..44cc1ea1bc66c
--- /dev/null
+++ b/pkgs/development/web/nodejs/corepack.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, nodejs }:
+
+let
+  inherit (nodejs) version;
+in
+stdenv.mkDerivation {
+  name = "corepack-nodejs-${version}";
+
+  nativeBuildInputs = [ nodejs ];
+
+  unpackPhase = "true";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    corepack enable --install-directory $out/bin
+    # Also wrap npm
+    corepack enable --install-directory $out/bin npm
+  '';
+
+  meta = {
+    description = "Wrappers for npm, pnpm and yarn via nodejs's corepack";
+    homepage = "https://nodejs.org";
+    changelog = "https://github.com/nodejs/node/releases/tag/v${version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ wmertens ];
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9cf0a108884c7..b56112d319955 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10236,6 +10236,8 @@ with pkgs;
   nodenv = callPackage ../development/tools/nodenv { };
 
   nodejs = hiPrio nodejs_18;
+  corepack = hiPrio (callPackage ../development/web/nodejs/corepack.nix {
+    nodejs = nodejs; });
 
   nodejs-slim = nodejs-slim_18;
 
@@ -10254,13 +10256,20 @@ with pkgs;
   nodejs-slim_18 = callPackage ../development/web/nodejs/v18.nix {
     enableNpm = false;
   };
+  corepack_18 = hiPrio (callPackage ../development/web/nodejs/corepack.nix
+  { nodejs = nodejs_18; });
   nodejs_20 = callPackage ../development/web/nodejs/v20.nix { };
   nodejs-slim_20 = callPackage ../development/web/nodejs/v20.nix {
     enableNpm = false;
   };
+  corepack_20 = hiPrio (callPackage ../development/web/nodejs/corepack.nix
+  { nodejs = nodejs_20; });
   # Update this when adding the newest nodejs major version!
   nodejs_latest = nodejs_20;
   nodejs-slim_latest = nodejs-slim_20;
+  corepack_latest = hiPrio (callPackage ../development/web/nodejs/corepack.nix
+  { nodejs = nodejs_latest; });
+
 
   buildNpmPackage = callPackage ../build-support/node/build-npm-package { };