nodejs / corepack

Zero-runtime-dependency package acting as bridge between Node projects and their package managers
MIT License
2.52k stars 165 forks source link

`corepack project install` command? #505

Open mmkal opened 3 months ago

mmkal commented 3 months ago

Currently, there's no standardized way to install dependencies for projects using different package managers without prior knowledge of the specific manager used. This can complicate CI/CD pipelines, development scripts, and workflows for developers working across multiple projects.

It would be nice to be able to write a script that will do npm install / pnpm install / yarn install on arbitrary packages, without having to know in advance what their packageManager field says.

Proposal - a --project parameter added to the install command:

corepack install --project

This would change install to install the project/node_modules rather than the package manager itself. (Or could be a separate command or something).

For a project with "packageManager": "pnpm@9.4.0" the corepack install --project command would be equivalent to running

corepack enable
pnpm install

(called via a subshell)

Or for a project with "packageManager": "npm@10.1.0" this would be equivalent to

corepack enable
npm install

Similar for yarn, etc.

Benefits

Other notes:

Not sure if this has been asked before but I couldn't find it in the issues.

aduh95 commented 3 months ago

Worth noting that corepack up does run <pkg-manager> install, so IMO it wouldn't be inconsistent to have a command that would do the same thing without updating the version of the package manager.

/cc @arcanis

styfle commented 3 months ago

This would be really nice.

I think I would take it a step further so I could also run remove or any other subcommand of a given package manager.

Maybe something like corepack --project <subcommand>, for example:

corepack --project init
corepack --project install
corepack --project add foobar
corepack --project remove foobar
mmkal commented 3 months ago

I like that. Maybe project itself could be a command, and install/add/remove subcommands, since corepack --project install would now be a pretty different thing from corepack install. corepack project x reads a bit nicer, and makes clear that you're scoping down what you're doing to the project-level.

So:

corepack project install
corepack project add left-pad
corepack project remove right-pad
mmkal commented 1 month ago

Opened a PR! #551