ng update ignores project .npmrc registry
Command
update
Is this a regression?
- [ ] Yes, this behavior used to work in the previous version
The previous version in which this bug was not present was
No response
Description
I have a project level .npmrc with
registry=https://registry.npmjs.org/
and a user level .npmrc with
registry=https://example-company-private-repo.org/
As described here https://docs.npmjs.com/cli/v10/configuring-npm/npmrc project level config should override user level config. The output of npm config:
; "user" config from /Users/sam.wootton/.npmrc
; registry = "https://example-company-private-repo.org/" ; overridden by project
; "project" config from /Users/sam.wootton/devspace/personal/ngstuff/myproject/.npmrc
registry = "https://registry.npmjs.org/"
; "cli" config from command line options
Minimal Reproduction
ng update (with different registry in .npmrc at the user and project level). I've removed node_modules (to ensure no packages from the user level registry)
Exception or Error
Running ng update, the user level registry is used and the project level one is ignored:
ng update @angular/core@16 @angular/cli@17
The installed Angular CLI version is outdated.
Installing a temporary Angular CLI versioned 16.2.12 to perform the update.
npm ERR! code ENOTFOUND
npm ERR! syscall getaddrinfo
npm ERR! errno ENOTFOUND
npm ERR! network request to https://company-private-repo.org/@angular%2fcli failed, reason: getaddrinfo ENOTFOUND company-private-repo.org
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
### Your Environment
Angular CLI: 15.2.10 Node: 16.15.0 Package Manager: npm 8.5.5 OS: darwin arm64
Angular:
Package Version
@angular-devkit/architect 0.1502.10 (cli-only)
@angular-devkit/build-angular
### Anything else relevant?
_No response_
Can you please run the update command with the --verbose option and provide the output? Thanks.
I was attempting to recreate from scratch, unfortunately have the same issue with
ng new --create-application=false
It hangs if I have this in my ~/.npmrc
registry=https://example-company-private-repo.org/
But works if I have
registry=https://registry.npmjs.org
In both examples, the project directory .npmrc has
registry=https://registry.npmjs.org
I can't run ng new with verbose, doesn't seem to be an option
https://angular.io/cli/new
Thanks, Sam
@samwootton, I looks like you are reporting a a slightly different issue.
@alan-agius4 same issue, just with "new" instead of "update". I guess as the initial directory just has .nmprc (and there is no ng workspace / project), that .npmrc is ignored and the ~/.npmrc is used. There's no way to specify an .npmrc or registry when running "ng new"?
@alan-agius4 I ran with --verbose, you can see from the log here, the ~/.npmrc is being chose (line 11). You can see I use nvm too. Here's the log output:
0 verbose cli [
0 verbose cli '/Users/sam.wootton/.nvm/versions/node/v16.15.0/bin/node',
0 verbose cli '/Users/sam.wootton/.nvm/versions/node/v16.15.0/bin/npm',
0 verbose cli 'install',
0 verbose cli '@angular/[email protected]',
0 verbose cli '--prefix=/private/var/folders/qw/95f4vfgn1wb8gz402xpx0n6w0000gp/T/angular-cli-packages-StDlIR',
0 verbose cli '--no-package-lock'
0 verbose cli ]
1 info using [email protected]
2 info using [email protected]
3 timing npm:load:whichnode Completed in 0ms
4 timing config:load:defaults Completed in 1ms
5 timing config:load:file:/Users/sam.wootton/.nvm/versions/node/v16.15.0/lib/node_modules/npm/npmrc Completed in 1ms
6 timing config:load:builtin Completed in 1ms
7 timing config:load:cli Completed in 1ms
8 timing config:load:env Completed in 0ms
9 timing config:load:file:/private/var/folders/qw/95f4vfgn1wb8gz402xpx0n6w0000gp/T/angular-cli-packages-StDlIR/.npmrc Completed in 0ms
10 timing config:load:project Completed in 0ms
11 timing config:load:file:/Users/sam.wootton/.npmrc Completed in 2ms
12 timing config:load:user Completed in 2ms
13 timing config:load:file:/private/var/folders/qw/95f4vfgn1wb8gz402xpx0n6w0000gp/T/angular-cli-packages-StDlIR/etc/npmrc Completed in 0ms
14 timing config:load:global Completed in 0ms
15 timing config:load:validate Completed in 1ms
Here is the console output:
sam.wootton@L7S9LXD3-MC1 tyt % ng update @angular/core@17 @angular/cli@17 --verbose
Locating potential npmrc files:
Trying '/Users/sam.wootton/.npmrc'...found.
Trying '/Users/sam.wootton/devspace/personal/tyt/.npmrc'...found.
The installed Angular CLI version is outdated.
Installing a temporary Angular CLI versioned 17.2.3 to perform the update.
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@angular/[email protected]',
npm WARN EBADENGINE required: {
npm WARN EBADENGINE node: '^18.13.0 || >=20.9.0',
npm WARN EBADENGINE npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE yarn: '>= 1.13.0'
npm WARN EBADENGINE },
npm WARN EBADENGINE current: { node: 'v16.15.0', npm: '8.5.5' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@angular-devkit/[email protected]',
npm WARN EBADENGINE required: {
npm WARN EBADENGINE node: '^18.13.0 || >=20.9.0',
npm WARN EBADENGINE npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE yarn: '>= 1.13.0'
npm WARN EBADENGINE },
npm WARN EBADENGINE current: { node: 'v16.15.0', npm: '8.5.5' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@angular-devkit/[email protected]',
npm WARN EBADENGINE required: {
npm WARN EBADENGINE node: '^18.13.0 || >=20.9.0',
npm WARN EBADENGINE npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE yarn: '>= 1.13.0'
npm WARN EBADENGINE },
npm WARN EBADENGINE current: { node: 'v16.15.0', npm: '8.5.5' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@angular-devkit/[email protected]',
npm WARN EBADENGINE required: {
npm WARN EBADENGINE node: '^18.13.0 || >=20.9.0',
npm WARN EBADENGINE npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE yarn: '>= 1.13.0'
npm WARN EBADENGINE },
npm WARN EBADENGINE current: { node: 'v16.15.0', npm: '8.5.5' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@schematics/[email protected]',
npm WARN EBADENGINE required: {
npm WARN EBADENGINE node: '^18.13.0 || >=20.9.0',
npm WARN EBADENGINE npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE yarn: '>= 1.13.0'
npm WARN EBADENGINE },
npm WARN EBADENGINE current: { node: 'v16.15.0', npm: '8.5.5' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '[email protected]',
npm WARN EBADENGINE required: { node: '>=18' },
npm WARN EBADENGINE current: { node: 'v16.15.0', npm: '8.5.5' }
npm WARN EBADENGINE }
npm ERR! code ENOTFOUND
npm ERR! syscall getaddrinfo
npm ERR! errno ENOTFOUND
npm ERR! network request to https://example-company-private-repo.org/npm/all-npm/@schematics/angular/-/angular-17.2.3.tgz failed, reason: getaddrinfo ENOTFOUND artifactory.ci.gameop.net
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
I think this could be nvm rather than ng. I could not replicate the original issue when I didn't use NVM. Issue https://github.com/npm/cli/issues/5460 ? Sam
During ng update, Angular CLI temporarily installs itself, generating a new directory, such as /private/var/folders/qw/95f4vfgn1wb8gz402xpx0n6w0000gp/T/angular-cli-packages-StDlIR, where it executes npm install to fetch the latest Angular CLI version for the update. However, NPM fails to locate the project's .npmrc configuration in this location.
For ng new, you can utilize the --skip-install flag, create the .npmrc file after the command completes, and manually execute npm install.
However, as highlighted in https://github.com/npm/cli/issues/5460#issuecomment-1238183264, unless your company's NPM repository also functions as a proxy to the public repository, employing scopes would certainly be a more recommended approach.
Thanks @alan-agius4.
I'll follow your steps for ng new.
Is a change going to be made to ng update?
Sam
Yes, but there is no ETA for the ng update bug fix.
I had the same issue with ng update ignoring my .npmrc config, where the private registry serves as a proxy.
I recognized that only the temporary installation of the newer @angular/cli is not respecting the .npmrc config. So to work around this, I updated the Angular CLI manually in the package.json and installed it. After that, I could use the ng update command as usual and also apply the updates and migrations of other Angular packages via the private proxy registry.