corepack
corepack copied to clipboard
[ Error ] - NixOS - Corepack/Pnpm Version Mismatch/Internal Error
Issue: When attempting to use Corepack with [email protected] on NixOS, the installation process encounters an error due to a version mismatch. This issue also arises when enabling Corepack, leading to an internal error related to symlink creation in a read-only file system.
Error Messages:
-
During pnpm installation:
$ corepack use pnpm@* ERR_PNPM_BAD_PM_VERSION This project is configured to use v9.0.0-alpha.5+sha256.9b9b9a4f189d3837e7cfcabed63ab7b4afa6844ed98c6e1705bd70d0d9bef60b of pnpm. Your current pnpm is v9.0.0
-
While enabling Corepack:
$ corepack enable Internal Error: EROFS: read-only file system, symlink '../lib/node_modules/corepack/dist/pnpm.js' -> '/nix/store/HIDDEN-HASH-CODE-nodejs-20.11.1/bin/pnpm' Error: EROFS: read-only file system, symlink '../lib/node_modules/corepack/dist/pnpm.js' -> '/nix/store/HIDDEN-HASH-CODE-nodejs-20.11.1/bin/pnpm'
Steps to Reproduce NodeJS Unstable Installation:
nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz -p nodejs
Steps to Reproduce:
-
Run the following commands to install pnpm:
corepack use pnpm@*
-
Attempt to enable Corepack:
corepack enable
Environment Information:
- Operating System: NixOS
- Corepack Version: 0.23.0
- pnpm Version: 9.0.0-alpha.5
- NodeJS Version: v20.11.1
- Nixpkgs Version: nixos-unstable
Expected Behavior: The installation of pnpm and enabling Corepack should proceed without version mismatches or errors related to read-only file systems.
Actual Behavior: Errors are encountered during the installation of pnpm, enabling Corepack
The read-only issue was addressed by https://github.com/nodejs/corepack/pull/244 specifically for the Nix-OS use case :) You could of course define your own nix expression to create a jumper script:
{ pkgs, nodejs }:
let
pnpm-shim = pkgs.writeShellScriptBin "pnpm" "exec \"${pkgs.lib.getBin nodejs}/bin/node\" \"${pkgs.lib.getBin nodejs}/bin/corepack\" pnpm \"$@\"";
in pnpm-shim
The ERR_PNPM_BAD_PM_VERSION
seems to be a PNPM bug, that error is not thrown by Corepack.
The read-only issue was addressed by #244 specifically for the Nix-OS use case :) You could of course define your own nix expression to create a jumper script:
Thanks,
I've written a blog on creating a custom pnpm script aka (jumper nix script) and integrating it with direnv.
blog - https://byteshiva.medium.com/using-nix-to-create-a-custom-pnpm-script-and-integrate-with-direnv-a31017232e8d