From 724f6bcb774dc5764a760a15b007d4ad0af5c9c0 Mon Sep 17 00:00:00 2001 From: Wout Mertens Date: Tue, 27 Sep 2022 10:17:50 +0200 Subject: [PATCH 1/2] nodejs: corepack wrappers package --- .../javascript.section.md | 4 +++ pkgs/development/web/nodejs/corepack.nix | 28 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 9 ++++++ 3 files changed, 41 insertions(+) create mode 100644 pkgs/development/web/nodejs/corepack.nix diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md index 0a2099b0a6b1..87d9195fd2a1 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 000000000000..44cc1ea1bc66 --- /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 9cf0a108884c..b56112d31995 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 { }; From 00de2104fc1048a36bb8526b96c9b2d285a321a9 Mon Sep 17 00:00:00 2001 From: Wout Mertens Date: Wed, 20 Sep 2023 09:54:38 +0200 Subject: [PATCH 2/2] corepack: PR review updates Co-authored-by: Antoine du Hamel Co-authored-by: Sandro Jaeckel --- .../javascript.section.md | 2 +- pkgs/development/web/nodejs/corepack.nix | 18 +++++----- pkgs/top-level/all-packages.nix | 34 +++++++------------ 3 files changed, 21 insertions(+), 33 deletions(-) diff --git a/doc/languages-frameworks/javascript.section.md b/doc/languages-frameworks/javascript.section.md index 87d9195fd2a1..fb1dd898c8a2 100644 --- a/doc/languages-frameworks/javascript.section.md +++ b/doc/languages-frameworks/javascript.section.md @@ -219,7 +219,7 @@ 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`. +This package puts the corepack wrappers for pnpm and yarn in your PATH, and they will honor the `packageManager` setting in the `package.json`. ### node2nix {#javascript-node2nix} diff --git a/pkgs/development/web/nodejs/corepack.nix b/pkgs/development/web/nodejs/corepack.nix index 44cc1ea1bc66..c83d3f1645fc 100644 --- a/pkgs/development/web/nodejs/corepack.nix +++ b/pkgs/development/web/nodejs/corepack.nix @@ -1,26 +1,24 @@ { lib, stdenv, nodejs }: -let - inherit (nodejs) version; -in stdenv.mkDerivation { - name = "corepack-nodejs-${version}"; + pname = "corepack-nodejs"; + inherit (nodejs) version; nativeBuildInputs = [ nodejs ]; - unpackPhase = "true"; + dontUnpack = true; installPhase = '' mkdir -p $out/bin corepack enable --install-directory $out/bin - # Also wrap npm - corepack enable --install-directory $out/bin npm + # Enabling npm caused some crashes - leaving out for now + # 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}"; + description = "Wrappers for npm, pnpm and Yarn via Node.js Corepack"; + homepage = "https://nodejs.org/api/corepack.html"; + changelog = "https://github.com/nodejs/node/releases/tag/v${nodejs.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 b56112d31995..cc82178c2fbd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10236,40 +10236,30 @@ 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; + corepack = hiPrio corepack_18; - nodejs_14 = callPackage ../development/web/nodejs/v14.nix { - openssl = openssl_1_1; - }; + nodejs_14 = callPackage ../development/web/nodejs/v14.nix { openssl = openssl_1_1; }; nodejs-slim_14 = callPackage ../development/web/nodejs/v14.nix { openssl = openssl_1_1; enableNpm = false; }; + nodejs_16 = callPackage ../development/web/nodejs/v16.nix { }; - nodejs-slim_16 = callPackage ../development/web/nodejs/v16.nix { - enableNpm = false; - }; + nodejs-slim_16 = callPackage ../development/web/nodejs/v16.nix { enableNpm = false; }; + nodejs_18 = callPackage ../development/web/nodejs/v18.nix { }; - nodejs-slim_18 = callPackage ../development/web/nodejs/v18.nix { - enableNpm = false; - }; - corepack_18 = hiPrio (callPackage ../development/web/nodejs/corepack.nix - { nodejs = nodejs_18; }); + 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; }); + 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; }); - + corepack_latest = hiPrio corepack_20; buildNpmPackage = callPackage ../build-support/node/build-npm-package { };