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

npm >= 9.4.2 install-links=true doesn't behave the same as in npm 9.4.1 #47287

Closed
spongenee opened this issue Mar 28, 2023 · 1 comment
Closed

Comments

@spongenee
Copy link

Version

19.8.1

Platform

Environment: darwin, node 19.8.1, framework 3.22.0 (local), plugin 6.2.3, SDK 4.3.2

Subsystem

serverless

What steps will reproduce the bug?

npm i
npm ci
npm run deploy

How often does it reproduce? Is there a required condition?

Only happens for npm versions >= 9.4.2
No error for prior npm versions

What is the expected behavior? Why is that the expected behavior?

no error

What do you see instead?

Error: npm ls -prod -json -depth=1 failed with code 1
npm ls -prod -json -depth=1
npm ERR! code ELSPROBLEMS
npm ERR! missing: packages required by local npm package

Additional information

Our package.json file worked with npm 9 versions prior to 9.4.2, and broke in later versions. I read the change log and think that the install-links change to false in 9.4.2 is most relevant: npm/cli#6142

Let me explain more on how we manage packages and the errors we see in the version change from npm 9.4.1 to 9.4.2. We developed npm local packages and the package.json points to file:../package and the package version is defined in ../package/package.json, say 1.0.0.

npm i in 9.4.1 will install all the dependencies of the local package, npm ls -prod -json -depth=1 has no error and outputs the following

    "package": {
      "version": "1.0.0",
      "resolved": "file:/path/to/package",
      "overridden": false,
      "dependencies": {
        "another_local_package": {
          "version": "1.0.0"
        },
        "decimal.js": {
          "version": "7.5.1",
          "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-7.5.1.tgz",
          "overridden": false
        }
      }
    }

in npm 9.4.2, we see the following after npm i

    "package": {
      "version": "1.0.0",
      "resolved": "file:/path/to/package",
      "overridden": false,
      "dependencies": {
        "decimal.js": {
          "missing": true,
          "problems": [
            "missing: decimal.js@^7.5.1, required by package@1.0.0"
          ]
        }
    }

As I understand the install-links flag was default to true prior to 9.4.2 so I tried npm i --install-links in npm 9.4.2 and we see a different error

    "package": {
      "version": "1.0.0",
      "resolved": "file:/path/to/package",
      "overridden": false,
      "invalid": "\"file:../package\" from the root project",
      "problems": [
        "invalid: package@1.0.0 /path/to/package"
      ],
      "dependencies": {
        "decimal.js": {
          "version": "7.5.1"
        }
     }

If I change package.json to "package": "1.0.0" instead of "package": "../package", then another npm i will resolve the error. But that is very not ideal as that will not work without the prior install, it will try to look for the local package in public npm repos and get 404 error.

What can I do to make npm i behave as in 9.4.1 in later versions?

@mscdex
Copy link
Contributor

mscdex commented Mar 28, 2023

This should be posted to the npm issue tracker instead.

@mscdex mscdex closed this as not planned Won't fix, can't repro, duplicate, stale Mar 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants