jetify-com / devbox

Instant, easy, and predictable development environments
https://www.jetify.com/devbox/
Apache License 2.0
8.32k stars 194 forks source link

Docs: Mention "packageManager" field on NodeJS docs #2270

Open Leksat opened 6 days ago

Leksat commented 6 days ago

What problem are you trying to solve?

https://www.jetify.com/devbox/docs/devbox_examples/languages/nodejs/ suggests using DEVBOX_COREPACK_ENABLED to get a desired package manager. Also, at the bottom of the page there is another example:

  "packages": [
    "nodejs@18",
    "nodePackages.yalc@latest",
    "nodePackages.pm2@latest"
  ]

Reading this page, I created my devbox.json as follows:

  "packages": [
    "nodejs@18.19.0",
    "nodePackages.pnpm@8.6.12" // oh no...
  ],

And was quite confused to see this behavior:

$ node -v
v18.19.0

$ pnpm -v
8.6.12

$ pnpm i
Your Node version is incompatible with the project.
Expected version: ^18.19.0
Got: v18.17.1

I have found what I was doing wrong after reading some source code. (No idea how I got there πŸ˜…) https://github.com/jetify-com/devbox/blob/d1ab6416fbe86682b56a28bf2fb4159e7af2ba70/plugins/nodejs.json#L5

You can install Yarn or Pnpm by adding them to your package.json file using packageManager

What solution would you like?

I know there are links to example repos on the docs page. But it would make it much easier to follow if "packageManager" field is mentioned directly on the docs page πŸ™

Alternatives you've considered

Close this issue and let the newcomers struggle 😁

Leksat commented 6 days ago

Also, it was a surprise that nodePackages.pnpm came with its own Node.js. I was expecting it to use nodejs I defined in packages. Are there any docs about this?

savil commented 6 days ago

Would it help to add a callout-visual element that says Use Corepack to install yarn or pnpm. Enabling Corepack will introduce the yarn and pnpm binaries into your shell environment that work with your version of nodejs specified viadevbox add. ?

Also, it was a surprise that nodePackages.pnpm came with its own Node.js.

Yes, this is because Devbox relies on Nix packages, which are designed to be reproducibly installed and run. To achieve this, each nix package specifies the specific versions of their dependencies. When nodePackages.pnpm@latest is installed it will install the specific version of nodejs that this latest version was defined as depending on.

Leksat commented 6 days ago

For me, the text that I have found in the code would work better, maybe a little rephrased:

You can install Yarn or Pnpm by adding them to the packageManager field of your package.json.

And maybe an addition:

See the example repositories below.