NPM 로그인이 작동하지 않음

6466 단어 nodenpmbugjavascript


TL;DR



This solutionNode v16.13.0NPM v8.1.3에서 작동합니다.

소개



NPM이 수많은 node_modules를 다운로드하고 그다지 장황하지 않은 로그를 제공하지 않는 한 NPM을 사용하여 작업하는 것을 항상 싫어하지는 않습니다. 오늘 제 동료와 저는 그다지 흥미롭지 않고 디버그하기 어려운 NPM 로그인 버그를 발견했습니다. 근본 원인을 찾는 데 약 1시간이 걸립니다.

이 기사에서는 동일한 문제가 발생할 경우를 대비하여 솔루션을 작성합니다.

현재 상태



현재 회사에서는 Nexus3를 NPM 모듈의 개인 저장소로 사용합니다. 또한 로컬 컴퓨터에서 작업할 때 Node v12.22.4NPM v8.1.3를 사용합니다. Nexus 저장소에 로그인하기 위해 다음 형식으로 .npmrc를 사용합니다.

@myorg:registry=https://repo.myorg.com/repository/npm-private
always-auth=true
_auth={{ base64 of username:password redacted here }}


그리고 우리는 그것에 만족합니다. 문제 없습니다.

문제



동료가 Node v16.13.0 를 사용하려고 할 때 문제가 발생합니다. npm i @myorg/utils 명령이 실행되면 401 라고 시작합니다.

npm ERR! code E401
npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user/.npm/_logs/2021-11-18T06_37_02_136Z-debug.log


솔루션 찾기


Nexus 3Node v16와 호환되지 않는 것인지 궁금합니다. 그래서 Nexus 저장소에 다시 로그인을 시도했습니다.

$ npm login --registry=https://repo.myorg.com/repository/npm-private/ --scope=@myorg/
npm notice Log in on https://repo.myorg.com/repository/npm-private/
Username: {{ username }}
Password: 
Email: (this IS public) {{ [email protected] }}
Logged in as {{ username }} on https://repo.myorg.com/repository/npm-private/.


자, 이제 로그인했습니다. 하지만 npm whoami 를 사용하여 확인하자마자 다시 401 라고 표시됩니다.

$ npm whoami --registry=https://repo.myorg.com/repository/npm-private/ 
npm ERR! code E401
npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user/.npm/_logs/2021-11-18T06_49_38_788Z-debug.log


그런 다음 내 .npmrc 파일 내용을 확인하고 Node v16의 형식이 .npmrc 와 다른 것으로 나타났습니다. 내 현재.npmrc 파일 내용은 다음과 같습니다.

//repo.myorg.com/repository/npm-private/:_authToken=NpmToken.{{ uuid redacted here }}


정말 이상한 형식입니다. 범위를 반영하지 않으며 여전히 _authToken 형식 자체와 혼동됩니다. 물론 좋은 개발자로서 Google의 모든 키워드에서 버그를 검색하는 빠른 손이 필요합니다. 그리고 this comment 에 의해 @apottere 을 찾았습니다. 그래서 .npmrc 파일 내용을 수동으로 다시 작성하려고 했습니다. 이것은 내 현재.npmrc 파일 내용입니다.

//repo.myorg.com/repository/npm-private/:always-auth=true
//repo.myorg.com/repository/npm-private/:_auth={{ base64 of username:password redacted here }}


유망해 보여서 다시 실행npm i @myorg/utils을 시도했습니다. 그리고 그것은 실패했습니다.

$ npm install @myorg/utils
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@myorg%2futils - Not found
npm ERR! 404 
npm ERR! 404  '@myorg/utils@^0.2.0' is not in this registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user/.npm/_logs/2021-11-18T07_04_32_033Z-debug.log


예, 찾을 수 없습니다. .npmrc 파일에 스코프가 반영되지 않아서 그런 줄 알았습니다.

해결책



그래서 옛날 방식으로 내용을 수동으로 다시 작성해 보았습니다. 이것은 내 현재 및 최종.npmrc 파일 내용입니다.

@myorg:registry=https://repo.myorg.com/repository/npm-private
//repo.myorg.com/repository/npm-private/:always-auth=true
//repo.myorg.com/repository/npm-private/:_auth={{ base64 of username:password redacted here }}


마지막으로 npm i @myorg/utils 명령을 다시 시도했는데 작동했습니다.

$ npm install @myorg/utils

added 1 package, and audited 2 packages in 2s

found 0 vulnerabilities


결론



따라서 계속해서 npm login 명령이었습니다. 여전히 새 형식.npmrc에 대한 전체 문서를 찾을 수 없습니다. 문서를 놓쳤거나 문서가 없을 수도 있습니다. 동일한 문제가 있는 경우 이 문서를 찾아 문제를 해결할 수 있기를 바랍니다.

읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기