Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] prepack is not called on installation of git packages #257

Open
1 task done
aarondill opened this issue Feb 4, 2023 · 3 comments
Open
1 task done

[BUG] prepack is not called on installation of git packages #257

aarondill opened this issue Feb 4, 2023 · 3 comments
Labels
Bug thing that needs fixing Needs Triage needs an initial review

Comments

@aarondill
Copy link

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

The npm CLI documentation says that prepack "Runs BEFORE a tarball is packed (on "npm pack", "npm publish", and when installing a git dependencies)," yet in dir.js L39-L41, it's made clear that pacote expects the CLI to call it, rather than pacote itself.

Expected Behavior

Unless I am misunderstanding the control flow here, npm calls pacote before ever having access to the git repo's files, and doesn't receive control flow back until after the tarball has already been generated (and installed?). If that's the case, the calling of prepack when downloading a git repository needs to be done by pacote, rather than expecting the CLI to call it.

Notes:

Steps To Reproduce

See this comment in npm/cli for a simple reproduction process.

Environment

  • npm: 9.3.1, also tested on 9.4.1
  • Node: v18.14.0, also tested on v19.6.0
  • OS: Ubuntu 22.04.1 LTS
  • platform: HP Laptop 15-dy2xxx
@jakebailey
Copy link

We were actually considering adding a prepack script to TypeScript so that people could install via git for bisect purposes, but found out that it doesn't actually work in npm v7+. prepack has better semantics (doesn't run on a plain dep install in the repo) and works cross-package-manager, but not having this is really a bummer and we've ended up not actually adding it.

@wesbiggs
Copy link

wesbiggs commented Nov 4, 2023

Also/still a problem on npm 10.2.0.

A very silly workaround:

In the consuming package (i.e. the one that has the git dependency):

"scripts": {
  "prepare": "semver -r '>=9.0.0' $npm_config_npm_version && cd node_modules/package-from-git && npm run prepack"
}

Since the prepare script does run after install, this forces the desired behavior when the consuming package is installed. (The first time you add the package to package.json, though, you need to run it manually.) YMMV.

n.b. I don't know if 9.0.0 is the right version to start with, just guessing from the issue description.

@jakebailey
Copy link

If you hadn't seen it, there's also: https://github.com/cspotcode/workaround-broken-npm-prepack-behavior

Which is what ts-node uses to work around this problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug thing that needs fixing Needs Triage needs an initial review
Projects
None yet
Development

No branches or pull requests

3 participants