단일 npmrc 파일에 여러 레지스트리를 구성할 수 있는 방법이 있습니까?
여기 제 문제가 있습니다.VPN에서만 작동하는 개인 NPM 레지스트리가 있습니다.VPN이 없을 때 원활하게 작동할 수 있도록 폴백 레지스트리 https://registry.npmjs.org 을 원합니다.
추신: 현재 저는 npmrc를 사용하고 있습니다. npmrc는 전환을 잘합니다..npmrc
방법으로서의
의 범위가 지정된 패키지에 대한 레지스트리를 여러 개 가질 수 있습니다..npmrc
파일. 예:
@polymer:registry=<url register A>
registry=http://localhost:4873/
에 있는 @polymer
스코프는 https://registry.npmjs.org 에서 수신하지만 나머지는 현지 NPM에서 수신합니다.
버전 4.4.1에서 패키지 이름을 변경할 수 있는 경우 다음을 사용하십시오.
npm config set @myco:registry http://reg.example.com
에▁where디@myco
패키지 범위입니다.
다음과 같은 방법으로 패키지를 설치할 수 있습니다.
npm install @myco/my-package
자세한 내용은 https://docs.npmjs.com/misc/scope 에서 확인하시기 바랍니다.
저는 1위의 답변이 구식일 수도 있다고 생각합니다.2021년 6월 현재, npmrc npm 라이브러리를 사용하여 훨씬 더 쉬운 방법이 있습니다.
npmrc 설치
npmrc를 합니다.npm i npmrc -g
첫 번째 npm 프로필 만들기
npmrc를 설치한 후 프로필을 생성하여 사용자 정의 레지스트리(회사의 레지스트리일 수 있음)에 액세스할 수 있습니다.
프로파일을 npm Enterprise 파일을 합니다.npmrc -c name-of-profile
"라는 다음합니다.npmrc -c work
명령을 하여 "npm Enterprise"를 대체합니다. 대체your-company-registry
회사의 npm Enterprise 레지스트리 이름과 함께:
npm config set registry https://registry.your-company-registry.npme.io/
공용 npm 레지스트리에 대한 프로필 만들기
npm Enterprise 프로필을 생성한 후에는 공용 npm 레지스트리와 같은 다른 레지스트리에 대한 두 번째 프로필을 생성할 수 있습니다.
레지스트리에 를 합니다.npmrc -c name-of-profile
"라는 " 예들어라", "오픈소스는"를 합니다.npmrc -c open-source
프로필의 합니다.npm config set registry https://registry.npmjs.org/
npmrc를 사용하여 프로파일 전환
프로파일을 전환하려면 명령줄에서 profile-name을 프로파일 이름으로 대체하여 다음 명령을 실행합니다.
npmrc profile-name
최선의 방법은 아니지만, 만약 당신이 윈도우에서도 Mac이나 Linux를 사용한다면, 당신은 다른 레지스트리에 대한 별칭을 설정할 수 있습니다.
##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'
인증을 위한 솔루션을 찾는 사람들을 위해, 나는 범위가 지정된 패키지 솔루션에 당신이 당신의 컴퓨터에 여러 줄을 가질 수 있다는 것을 추가할 것입니다..npmrc
파일 이름:
//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy
각 라인은 서로 다른 NPM 레지스트리를 나타냅니다.
에 대해 여러 리포지토리 구문을 사용할 수 있습니다.registry
의 에력에 .npmrc
파일 이름:
registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/
그러면 npm이 다른 서버에서 패키지를 찾게 됩니다.
몇 년이 지났고 (npm만 사용하면) 이 작업을 수행할 수 없을 것 같기 때문에 이 문제를 해결할 수 있는 방법은 Nexus Repository Manager(Sonatype)를 사용하는 것입니다.Nexus는 여러 리포지토리를 지원하고, 이를 주문할 수 있으며, 프록시/캐시를 사용하여 속도를 향상시킬 수도 있습니다.
무료 버전과 무료/유료 버전이 있습니다.이를 지원하는 기능은 https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries 에 설명되어 있습니다.
관련 정보는 아래에 중복되므로 위의 URL/링크가 작동을 중지할 경우/정지해도 해당 정보는 그대로 유지됩니다.
리포지토리 그룹은 추가 클라이언트 측 구성 없이 리포지토리 관리자의 모든 npm 레지스트리 리포지토리를 사용자에게 노출하는 권장 방법입니다.리포지토리 그룹을 사용하면 하나의 URL로 여러 프록시 및 호스트된 리포지토리의 집계된 내용을 npm 및 기타 도구에 노출할 수 있습니다.
개인 NPM 레지스트리를 생성할 수 있습니다.
개인 npm 레지스트리를 사용하여 사용자 자신의 패키지와 타사 패키지를 업로드할 수 있습니다.
그리고.
개발자 및 CI 서버의 중복 다운로드를 줄이고 다운로드 속도를 향상시키려면 https://registry.npmjs.org 에서 호스트되는 레지스트리를 프록시해야 합니다.기본적으로 npm은 이 레지스트리에 직접 액세스합니다.또한 필요한 다른 레지스트리도 프록시할 수 있습니다.
이 작업을 수행하기 위해 수행하는 작업의 간단한 목록은 다음과 같습니다.
Nexus 설치
로컬/개인 보고서 작성(또는 다른 서버의 개인 보고서 지정)
개인 보고서와 공용 보고서를 나열하는 그룹을 만듭니다.
방금 만든 "GROUP"을 가리키도록 $HOME/.npmrc 파일을 구성합니다.
개인 npm 패키지를 로컬 repo에 게시합니다.
이제 사용자는 한 번 설정을 실행할 수 있습니다.
npm config set registry https://nexus/content/groups/GROUP
- 그런 다음 사용자는 다음을 통해 공용 또는 개인 패키지를 모두 설치할 수 있습니다.
npm install
.npm install my-private-package npm install lodash any-other-public-package
또한 공용 패키지와 개인 패키지를 모두 단순하게 설치할 수 있습니다.npm install
지휘권Nexus는 그룹에 구성된 각 저장소를 검색하는 패키지를 찾고 결과를 반환합니다.Sonpm은 여전히 레지스트리가 하나라고 생각하지만 커튼 뒤에는 여러 개의 저장소가 사용되고 있습니다.
중요 참고:구성 요소를 게시할 때 다음을 지정해야 합니다.npm publish --registry https://nexus/content/repositories/private-repo my-private-package
패키지가 올바른 repo에 게시되도록 명령합니다.
몇 가지 단계를 시도할 수 있습니다. (이것이 우리가 직장에서 하는 방법입니다.)
- 두 개 이상의 리포지토리 원본 주소로 레지스트리 그룹을 만듭니다.하나는 내부 개인 정보이고 다른 하나는 내부 개인 정보에 우선 순위를 부여하는 Npmjs의 프록시일 것입니다.
- 이 그룹을 .npmrc 파일의 레지스트리로 만듭니다.이런 식으로 npm은 항상 내부에서 가져오려고 시도합니다. 찾을 수 없는 경우 프록시에서 가져옵니다.
도움이 되길 바랍니다.
회사에서 자체 레지스트리를 설정할 때도 같은 문제가 발생하므로 이 문제를 해결하기 위해 프록시 레지스트리를 프록시 멀티 레지스트리로 많이 재작업합니다.그것이 당신에게도 도움이 되길 바랍니다.
2020년 4월 13일 현재 다른 범위를 사용할 수 없는 한 이러한 기능은 없지만 사후 설치 스크립트를 해결 방법으로 사용할 수 있습니다.항상 npm 설치 후 실행됩니다.
개인 github repo에서 .npmrc가 @foo-org/foo-pack-private를 설치하도록 구성되었지만 @foo-org/foo-pack-public 패키지가 npm에 있다고 가정합니다(동일한 범위: foo-org).
설치 후에는 다음과 같이 표시될 수 있습니다.
"scripts": {
...
"postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc".
}
종속성 배열에서 @foo-pack/foo-org를 제거하여 npm 설치가 github에서 가져오기를 시도하지 않도록 하고 패키지를 확인하는 --dry-run 플래그를 추가하는 것을 잊지 마십시오.json 및 package-lock.json은 npm 설치 후에도 변경되지 않습니다.
제 접근 방식은 레지스트리 스위치를 추가하는 약간의 명령줄 변형을 만드는 것이었습니다.
npm 실행 파일이 있는 nodejs 폴더에 다음 파일을 만들었습니다.
npm-.cmd
:
@ECHO OFF
npm --registry https://registry.npmjs.org %*
npm-
:
#!/bin/sh
"npm" --registry https://registry.npmjs.org "$@"
이제 일반 npm 레지스트리에 대한 작업을 수행하려면(VPN에 연결되지 않은 상태에서) 다음과 같이 입력합니다.npm-
내가 주로 타이핑하는 곳.npm
.
이 명령을 테스트하고 패키지의 레지스트리를 보려면 다음 예를 사용합니다.
npm- view lodash
PS. Windows에서 Bash, CMD 및 Powershell에서 테스트했습니다.나 또한
저도 같은 문제가 있었고 많은 솔루션을 시도했지만 작동하지 않았습니다. 이제는 NPM 개인 패키지에 다른 스쿱을 사용하여 문제를 해결했습니다.이제 동일한 레지스트리를 여러 개 사용할 수 있습니다..npmrc
:
.npmrc
만큼 넣을 수 있습니다원하는패수넣수을다있습니큼만키지▁you)
@scop1:registry=https://gitlab.example.com/api/v4/projects/<project1_id>/packages/npm/
@scop2:registry=https://gitlab.example.com/api/v4/projects/<project2_id>/packages/npm/
//gitlab.example.com/api/v4/projects/<project1_id>/packages/npm/:_authToken=${GITLAB_TOKEN}
//gitlab.example.com/api/v4/projects/<project2_id>/packages/npm/:_authToken=${GITLAB_TOKEN}
저는 이를 위해 Strongloop의 cli 도구를 사용합니다. 자세한 내용은 https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ 을 참조하십시오.
간 은 다음과.slc registry use <name>
아니요, NPM은 범위가 지정된 레지스트리를 제외하고 여러 레지스트리를 지원하지 않습니다.
참조: https://docs.npmjs.com/cli/v7/using-npm/scope
언급URL : https://stackoverflow.com/questions/32633678/is-there-any-way-to-configure-multiple-registries-in-a-single-npmrc-file
'sourcecode' 카테고리의 다른 글
.git는 커밋 후 무시합니다. (0) | 2023.05.28 |
---|---|
인증서 저장소의 인증서에 있는 개인 키에 대한 ASP.NET 액세스 권한을 부여하는 방법은 무엇입니까? (0) | 2023.05.28 |
볼륨 믹서 제어 (0) | 2023.05.28 |
xargs로 여러 명령 실행 (0) | 2023.05.28 |
UserInterfaceState.xcuserstate를 무시할 수 없음 (0) | 2023.05.28 |