devbox icon indicating copy to clipboard operation
devbox copied to clipboard

Docs: Mention "packageManager" field on NodeJS docs

Open Leksat opened this issue 1 year ago • 3 comments

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": [
    "[email protected]",
    "[email protected]" // 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 avatar Sep 13 '24 12:09 Leksat

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?

Leksat avatar Sep 13 '24 12:09 Leksat

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 via devbox 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.

savil avatar Sep 13 '24 17:09 savil

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.

Leksat avatar Sep 13 '24 19:09 Leksat