Skip to content

corepack project install command? #505

Open
@mmkal

Description

@mmkal

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 using npm, or looking for lockfiles, or just erroring
  • potential follow-on: allow passing extra args after a -- like corepack 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

aduh95 commented on Jun 27, 2024

@aduh95
Contributor

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

styfle commented on Jun 27, 2024

@styfle
Member

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

mmkal commented on Jun 27, 2024

@mmkal
Author

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
changed the title [-]`corepack install --project` command?[/-] [+]`corepack project install` command?[/+] on Jul 31, 2024
linked a pull request that will close this issue on Aug 21, 2024
mmkal

mmkal commented on Aug 21, 2024

@mmkal
Author

Opened a PR! #551

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @styfle@aduh95@mmkal

      Issue actions

        `corepack project install` command? · Issue #505 · nodejs/corepack