sourcecode

단일 npmrc 파일에 여러 레지스트리를 구성할 수 있는 방법이 있습니까?

codebag 2023. 5. 28. 20:45
반응형

단일 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 플래그를 추가하는 것을 잊지 마십시오.jsonpackage-lock.jsonnpm 설치 후에도 변경되지 않습니다.

제 접근 방식은 레지스트리 스위치를 추가하는 약간의 명령줄 변형을 만드는 것이었습니다.

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

반응형