Description
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
- Simplifies shared code for CI/CD pipelines like GitHub Actions
- Reduces boilerplate in build scripts
- Improves developer experience when working with multiple projects
Other notes:
- could/should probably have a fallback behaviour when no
packageManager
is present, of usingnpm
, or looking for lockfiles, or just erroring - potential follow-on: allow passing extra args after a
--
likecorepack install --project -- --no-frozend-lockfile
(though this would no longer really be generic across package managers I guess) - potential follow-on: similar install-package functionality like
corepack add left-pad
Not sure if this has been asked before but I couldn't find it in the issues.
Activity
aduh95 commentedon Jun 27, 2024
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 commentedon Jun 27, 2024
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:mmkal commentedon Jun 27, 2024
I like that. Maybe
project
itself could be a command, andinstall
/add
/remove
subcommands, sincecorepack --project install
would now be a pretty different thing fromcorepack 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 install --project` command?[/-][+]`corepack project install` command?[/+]corepack project install
command #551mmkal commentedon Aug 21, 2024
Opened a PR! #551
agent
sub-command #650