cli icon indicating copy to clipboard operation
cli copied to clipboard

[BUG] Running `npm i` fails with Cannot read properties of null (reading 'isDescendantOf')

Open fatso83 opened this issue 3 years ago • 6 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

This issue exists in the latest npm version

  • [X] I am using the latest npm

Current Behavior

When installing a project using PNPM first and then subsequently using standard npm to install it, the install process borks after a long time with:

npm ERR! Cannot read properties of null (reading 'isDescendantOf')

Looking at the generated debug log one can see a null pointer being mentioned:

``` 9918 timing idealTree:node_modules/.pnpm/node_modules/eslint/node_modules/table/node_modules/strip-ansi Completed in 1ms 9919 timing idealTree:node_modules/.pnpm/node_modules/eslint/node_modules/table/node_modules/ansi-regex Completed in 0ms 9920 timing idealTree:node_modules/.pnpm/node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob Completed in 0ms 9921 timing idealTree Completed in 14547ms 9922 timing command:i Completed in 14573ms 9923 verbose stack TypeError: Cannot read properties of null (reading 'isDescendantOf') 9923 verbose stack at [resolveLinks] (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1419:37) 9923 verbose stack at [buildDepStep] (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:792:33) 9923 verbose stack at [buildDepStep] (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1047:31) 9924 verbose cwd /home/carlerik/code/example-encrypt-properties 9925 verbose Linux 5.15.0-47-generic 9926 verbose node v18.10.0 9927 verbose npm v8.19.2 9928 error Cannot read properties of null (reading 'isDescendantOf') 9929 verbose exit 1 9930 timing npm Completed in 14748ms 9931 verbose unfinished npm timer reify 1665582899091 9932 verbose unfinished npm timer reify:loadTrees 1665582899109 9933 verbose unfinished npm timer idealTree:buildDeps 1665582899389 9934 verbose unfinished npm timer idealTree:node_modules/.pnpm/[email protected]/node_modules/yargs 1665582906713 9935 verbose code 1 9936 error A complete log of this run can be found in: 9936 error /home/carlerik/.npm/_logs/2022-10-12T13_54_58_915Z-debug-0.log ```

Adding a console.log("link.target is null!", link) just before it fails shows this: image

This points at one of the PNPM installed files being an issue of some sort. Maybe due to the symlinks created? image

Expected Behavior

I would expect that NPM would go about its business and handle the situation where PNPM previously has stepped all over its turf gracefully :smile:

It took some attempts (actually writing this) to discover that wiping with rm -r node_modules would fix the issue, so maybe one could add some heuristics to detect weird symlinks where there should not be and just delete the directory before re-installing? That would be very user friendly, at least.

Steps To Reproduce

  1. hub clone fatso83/example-encrypt-properties (clone this repo)
  2. cd example-encrypt-properties && pnpm i && npm i
  3. Observe an error: npm ERR! Cannot read properties of null (reading 'isDescendantOf')

Environment

  • npm: 7.12.0 (also tested on v6)
  • Node.js: 18.10.0 (latest, also tested on v16)
  • OS Name: Ubuntu 22.04.1 LTS
  • System Model Name: ?
  • npm config:
; "user" config from /home/carlerik/.npmrc

//registry.npmjs.org/:_authToken = (protected) 
flex-sdk:npm_cmd_ran = "install" 

; node bin location = /usr/local/bin/node
; node version = v18.10.0
; npm local prefix = /home/carlerik/code/nimble
; npm version = 8.19.2
; cwd = /home/carlerik/code/nimble
; HOME = /home/carlerik
; Run `npm config ls -l` to show all defaults.

fatso83 avatar Oct 12 '22 14:10 fatso83

Theoretically, links shouldn't be an issue. This is worth fixing.

fritzy avatar Oct 18 '22 09:10 fritzy

I'm also having this issue. In a workspace I have to run npm run version --no-workspaces ... to avoid the error. Other workspaces outside of the workspace where I'm running npm version are linked together using yarn install.

I also have a similar problem when not using --no-workspaces with this error for npm install:

  • https://github.com/npm/cli/issues/4787#issuecomment-1762505900

trusktr avatar Oct 24 '23 07:10 trusktr

@fritzy this isn't only about links. I have no links in node_modules of the project with this error, but the project is simply a workspace (a git submodule in a super repo).

trusktr avatar Nov 22 '23 02:11 trusktr

getting a similar error trying to run npm dedupe in https://github.com/open-telemetry/opentelemetry-js-contrib - npm install completes just fine.

6004 verbose stack TypeError: Cannot read properties of null (reading 'isDescendantOf')
6004 verbose stack     at #resolveLinks (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1414:37)
6004 verbose stack     at #buildDepStep (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:783:32)
6004 verbose stack     at #buildDepStep (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1035:30)
6004 verbose stack     at async Arborist.buildIdealTree (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:196:7)
6004 verbose stack     at async Promise.all (index 1)
6004 verbose stack     at async Arborist.reify (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:159:5)
6004 verbose stack     at async Dedupe.exec (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/lib/commands/dedupe.js:47:5)
6004 verbose stack     at async module.exports (/Users/simen/.nvm/versions/node/v20.10.0/lib/node_modules/npm/lib/cli-entry.js:61:5)
6005 verbose cwd /Users/simen/repos/opentelemetry-js-contrib
6006 verbose Darwin 23.2.0
6007 verbose node v20.10.0
6008 verbose npm  v10.2.5
6009 error Cannot read properties of null (reading 'isDescendantOf')

SimenB avatar Jan 05 '24 11:01 SimenB

This seems to occur when running npm i outside a directory with an existing package.json. Others may wish to check if they're actually in the directory they think they are. The error message is still poor though.

mikemaccana avatar Aug 20 '24 19:08 mikemaccana

@mikemaccana when i run npm in a dir that doesn't have a package.json file, i get a pretty clear ENOENT error about a missing package.json. (when it's not valid JSON, i get a clear EJSONPARSE error)

ljharb avatar Aug 20 '24 19:08 ljharb