[BUG] Problems for `npm ci` on a docker image starting v8.11.0
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
For the following package.json:
{
"name": "application",
"version": "1.18.1",
"private": true,
"scripts": {
"commit": "commit",
"dev": "NODE_ENV=development NEXT_PUBLIC_APP_ENV=local NEXT_PUBLIC_APP_VERSION=$(node -e 'console.log(require(\"./package.json\").version)') next dev",
"build": "next build",
"start": "NODE_ENV=production next start",
"export": "next export",
"type-check": "tsc --pretty --noEmit",
"format": "prettier --write **/*.{ts,tsx}",
"lint": "eslint . --ext ts --ext tsx --ext js",
"jest": "TZ=utc LC_ALL='en_US.UTF-8' LC_MESSAGES='en_US.UTF-8' LANGUAGE='en_US' LANG='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' jest",
"prettier": "prettier --write",
"pre-commit": "lint-staged && npm run test && npm run type-check && npm run format",
"prepare": "husky install || echo 'Running in production mode.'",
"test": "npm run jest",
"test:watch": "npm run jest -- --watch",
"test:ci": "npm run jest -- --ci",
"test:all": "npm lint && npm type-check && npm test",
"storybook": "start-storybook -p 6006 -s public",
"build-storybook": "build-storybook -s public",
"deploy-storybook": "storybook-to-ghpages"
},
"dependencies": {
"@react-hook/merged-ref": "^1.3.2",
"@rehooks/local-storage": "^2.4.4",
"@types/cookie": "^0.5.1",
"@types/js-cookie": "^3.0.2",
"@types/ms": "^0.7.31",
"@types/node": "^17.0.36",
"@types/react": "^18.0.9",
"@types/react-table": "^7.7.12",
"@types/uuid": "^8.3.4",
"axios": "^0.27.2",
"compressorjs": "^1.1.1",
"cookie": "^0.5.0",
"inline-style-prefixer": "^6.0.1",
"js-cookie": "^3.0.1",
"jwt-decode": "^3.1.2",
"luxon": "^2.4.0",
"ms": "^2.1.3",
"next": "12.1.6",
"next-i18next": "^11.0.0",
"react": "18.1.0",
"react-dom": "18.1.0",
"react-hook-form": "7.31.3",
"react-table": "^7.8.0",
"recharts": "^2.1.10",
"swr": "^1.3.0",
"throttle-debounce": "^3.0.1",
"type-fest": "^2.13.0",
"uuid": "^8.3.2",
"yerror": "^6.1.1"
},
"overrides": {
"openapi-ts-sdk-builder": {
"@apidevtools/swagger-parser": {
"ajv": "8.5.0"
}
},
"recharts": {
"react": "^18.0.0",
"react-dom": "^18.0.0"
}
},
"devDependencies": {
"@commitlint/cli": "^17.0.2",
"@commitlint/config-conventional": "^17.0.2",
"@commitlint/prompt-cli": "^17.0.0",
"@storybook/addon-essentials": "^6.5.6",
"@storybook/addons": "^6.5.6",
"@storybook/react": "^6.5.6",
"@storybook/storybook-deployer": "^2.8.11",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@types/jest": "^27.5.1",
"@types/luxon": "^2.3.2",
"@types/react-test-renderer": "^18.0.0",
"@types/throttle-debounce": "^5.0.0",
"@typescript-eslint/eslint-plugin": "^5.27.0",
"@typescript-eslint/parser": "^5.27.0",
"babel-jest": "^28.1.0",
"babel-loader": "^8.2.5",
"eslint": "^8.16.0",
"eslint-config-next": "^12.1.6",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-react": "^7.30.0",
"fork-ts-checker-webpack-plugin": "7.2.11",
"husky": "^8.0.1",
"identity-obj-proxy": "^3.0.0",
"jest": "^28.1.0",
"jest-environment-jsdom": "^28.1.0",
"lint-staged": "^13.0.0",
"openapi-ts-sdk-builder": "^4.0.0",
"prettier": "^2.6.2",
"react-test-renderer": "^18.1.0",
"storybook-addon-next-router": "^4.0.0",
"ts-loader": "^9.3.0",
"typescript": "^4.7.2"
},
"lint-staged": {
"*.@(ts|tsx)": [
"npm run lint",
"npm run format"
]
},
"eslintConfig": {
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"rules": {
"react/prop-types": "off"
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended"
],
"env": {
"es6": true,
"browser": true,
"jest": true,
"node": true
}
},
"babel": {
"presets": [
"next/babel"
]
},
"prettier": {
"semi": true,
"printWidth": 80,
"singleQuote": true,
"trailingComma": "all",
"proseWrap": "always"
}
}
Doing npm i, then docker build the following dockerfile:
FROM node:16-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm i -g [email protected]
RUN npm ci
Result in the following error:
Cannot read properties of null (reading 'children')
The full stack found in logs is:
52 verbose stack TypeError: Cannot read properties of null (reading 'children')
52 verbose stack at CanPlaceDep.checkCanPlaceCurrent (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/can-place-dep.js:253:35)
52 verbose stack at CanPlaceDep.checkCanPlace (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/can-place-dep.js:157:27)
52 verbose stack at new CanPlaceDep (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/can-place-dep.js:114:26)
52 verbose stack at PlaceDep.place (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/place-dep.js:123:19)
52 verbose stack at new PlaceDep (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/place-dep.js:73:10)
52 verbose stack at /usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:990:31
52 verbose stack at Array.map (<anonymous>)
52 verbose stack at Arborist.[buildDepStep] (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:990:8)
52 verbose stack at async Arborist.buildIdealTree (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:218:7)
52 verbose stack at async CI.exec (/usr/local/lib/node_modules/npm/lib/commands/ci.js:54:5)
Adding those logs before the failing lines:
console.log('DEP',dep);
console.log('NODE', entryNode);
console.log('PARENT', dep.parent);
Gives: DEP ArboristNode {#] | idealTree:app: timing idealTree:#root Completed in 1ms name: 'react', version: '17.0.2', location: '', path: '/app/node_modules/react-resize-detector/node_modules/react', resolved: 'https://registry.npmjs.org/react/-/react-17.0.2.tgz', extraneous: true, dev: true, optional: true, peer: true, isProjectRoot: true, overrides: Map(4) { 'react' => '^18.0.0', 'react-dom' => '^18.0.0', 'recharts' => '', 'openapi-ts-sdk-builder' => '' }, edgesOut: Map(2) { 'loose-envify' => { prod loose-envify@^1.1.0 MISSING }, 'object-assign' => { prod object-assign@^4.1.1 MISSING } } } NODE ArboristNode { name: 'react', version: '18.1.0', location: 'node_modules/react', path: '/app/node_modules/react', resolved: 'https://registry.npmjs.org/react/-/react-18.1.0.tgz', overrides: Map(2) { 'openapi-ts-sdk-builder' => '', 'recharts' => '' }, edgesOut: Map(1) { 'loose-envify' => { prod loose-envify@^1.1.0 -> node_modules/loose-envify } }, edgesIn: Set(48) { { "" prod [email protected] }, { node_modules/@react-hook/merged-ref peer react@>=16.8 }, { node_modules/@rehooks/local-storage peer react@>=16.8.0 }, { node_modules/@storybook/addon-actions peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-actions/node_modules/react-inspector peer react@^16.8.4 || ^17.0.0 INVALID }, { node_modules/@storybook/addon-backgrounds peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-controls peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-docs peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-docs/node_modules/@mdx-js/react peer react@^16.13.1 || ^17.0.0 INVALID }, { node_modules/@storybook/addon-measure peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-outline peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-toolbars peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addon-viewport peerOptional react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/addons peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/api peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/builder-webpack4 peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/client-api peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/components peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/core peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/core-client peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/core-common peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/core-server peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/manager-webpack4 peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/preview-web peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/react peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/react/node_modules/react-element-to-jsx-string peer react@^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 INVALID }, { node_modules/@storybook/router peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/source-loader peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/store peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/theming peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@storybook/ui peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/@testing-library/react peer react@^18.0.0 }, { node_modules/next peer react@^17.0.2 || ^18.0.0-0 }, { node_modules/next-i18next peer react@>= 16.8.0 }, { node_modules/react-dom peer react@^18.1.0 }, { node_modules/react-hook-form peer react@^16.8.0 || ^17 || ^18 }, { node_modules/react-i18next peer react@>= 16.8.0 }, { node_modules/react-resize-detector peer react@^16.0.0 || ^17.0.0 INVALID }, { node_modules/react-shallow-renderer peer react@^16.0.0 || ^17.0.0 || ^18.0.0 }, { node_modules/react-smooth peer react@^15.0.0 || ^16.0.0 || ^17.0.0 INVALID }, { node_modules/react-syntax-highlighter peer react@>= 0.14.0 }, { node_modules/react-table peer react@^16.8.3 || ^17.0.0-0 || ^18.0.0 }, { node_modules/react-test-renderer peer react@^18.1.0 }, { node_modules/react-transition-group peer react@>=15.0.0 }, { node_modules/recharts peer react@^16.0.0 || ^17.0.0 }, { node_modules/storybook-addon-next-router peer react@^16.8.0 || ^17.0.0 || ^18.0.0 }, { node_modules/styled-jsx peer react@>= 16.8.0 || 17.x.x || ^18.0.0-0 }, { node_modules/swr peer react@^16.11.0 || ^17.0.0 || ^18.0.0 } } } PARENT null
Expected Behavior
Should just install correctly
Steps To Reproduce
See explanations
Environment
- npm: 8.1.0 but tried on recenter versions
- Node.js: v16.15.1
- OS Name: Ubuntu / Alpine for Docker
- System Model Name:
- npm config:
; node bin location = /usr/local/bin/node
; node version = v16.15.1
; npm local prefix = /app
; npm version = 8.11.0
; cwd = /app
; HOME = /root
; Run `npm config ls -l` to show all defaults.
Using NPM v8.5.0 solves the issue.
We have the same problem with npm i, with the exact same stack trace.
Environment
npm: 8.11.0 node: 16.15.1 OS: Windows 10
Same issue with npm 8.15 also
same issue
770 verbose stack TypeError: Cannot read properties of null (reading 'children') 770 verbose stack at CanPlaceDep.checkCanPlaceCurrent (C:\Users\hjagatheesan\AppData\Roaming\nvm\v16.17.1\node_modules\npm\node_modules@npmcli\arborist\lib\can-place-dep.js:253:35) 770 verbose stack at CanPlaceDep.checkCanPlace (C:\Users\hjagatheesan\AppData\Roaming\nvm\v16.17.1\node_modules\npm\node_modules@npmcli\arborist\lib\can-place-dep.js:157:27) 770 verbose stack at new CanPlaceDep (C:\Users\hjagatheesan\AppData\Roaming\nvm\v16.17.1\node_modules\npm\node_modules@npmcli\arborist\lib\can-place-dep.js:114:26) 770 verbose stack at PlaceDep.place (C:\Users\hjagatheesan\AppData\Roaming\nvm\v16.17.1\node_modules\npm\node_modules@npmcli\arborist\lib\place-dep.js:123:19) 770 verbose stack at new PlaceDep (C:\Users\hjagatheesan\AppData\Roaming\nvm\v16.17.1\node_modules\npm\node_modules@npmcli\arborist\lib\place-dep.js:73:10)
Same Issue. downgrading to 8.5.0 helps. or having the newest version and enabling legacy-peer-deps (seems to be the issue there)
This tree has a conflict between react ^18.2.0 and ^18.1.0, and so you either need to use dependencies that have the same peer deps, or use --legacy-peer-deps.
My solution was:
https://stackoverflow.com/questions/73933728/how-to-tell-expo-to-install-npm-dependencies-with-legacy-peerdeps-option