여기 내 문제가 있습니다. VPN에서만 작동하는 개인 NPM 레지스트리가 있습니다. VPN을 사용하지 않을 때 원활하게 작동하도록 폴백 레지스트리 https://registry.npmjs.org 를 갖고 싶습니다 .
추신 : 현재 npmrc 를 사용하고 있습니다 .npmrc 는 해결 방법으로 .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
@myco
패키지 범위는 어디에 있습니까 ?
다음과 같은 방법으로 패키지를 설치할 수 있습니다.
npm install @myco/my-package
자세한 정보 : https://docs.npmjs.com/misc/scope
Invalid package name "@npmjs/": name can only contain URL-friendly characters
달릴 때 오고있다npm i
인증 솔루션을 찾는 사람이라면 .npmrc
파일에 여러 줄을 가질 수있는 범위가 지정된 패키지 솔루션을 추가 합니다.
//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy
각 줄은 다른 NPM 레지스트리를 나타냅니다
npm login --registry=npm.example.com
. 로그인 자격 증명 (authTokens)은 사용자 폴더의 .npmrc 파일에 저장되므로 소스 코드 ( docs.npmjs.com/cli/adduser ) 에 필요하지 않습니다.
registry.npmjs.org
이 나를 위해 일했다
가장 좋은 방법은 아니지만 Windows에서도 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/'
alias npm-sin=npm --registry https://localhost:4873/
몇 년이 지났고 (npm 만 사용하여)이 작업을 수행 할 수없는 것처럼 보이 므로이 문제에 대한 해결책 은 Sonatype 의 Nexus Repository Manager 를 사용하는 것 입니다. 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을 만듭니다.
방금 생성 한 "GROUP"을 가리 키도록 $ HOME / .npmrc 파일을 구성하십시오.
비공개 npm 패키지를 로컬 리포지토리에 게시하십시오.
사용자는 이제 일회성 설정을 실행할 수 있습니다.
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는 그룹에 구성된 각 리포지토리를 검색하는 패키지를 찾아 결과를 반환합니다. 따라서 npm은 여전히 레지스트리가 하나만 있다고 생각하지만 커튼 뒤에는 여러 개의 저장소가 사용되고 있습니다.
중요 참고 : 구성 요소를 게시 할 때 npm publish --registry https://nexus/content/repositories/private-repo my-private-package
패키지가 올바른 저장소에 게시되도록 명령 을 지정해야합니다 .
npm-private
대신 npm-group
) 프로젝트 의 registry
-key를 재정의 할 수 있습니다 package.json
( https://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
자세한 내용 참조). 를 사용하여 (전달 저장소) 및 (자신의 저장소) 를 포함 npm config set registry <url>
하는 예를로 설정할 수 있습니다 . 로컬 GitLab CE에서 아티팩트를 얻는 것이 너무 복잡했기 때문에이 솔루션을 사용했습니다. npm-group
npm-registry
npm-private
파일 의 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이 다른 서버에서 패키지를 찾게됩니다.
serverA
, serverB
및 serverC
예를 들어 저장소는 우리의 내부 네트워크, 당신을 위해 늘 직장에서 모두. 그것이 당신에게 적합한 지 모르겠지만 그것이 생각된다면 내부 저장소에 Nexus Repository Manager를 배포 할 수 있습니다.
시도해 볼 수있는 몇 가지 단계. (우리가 직장에서하는 방식)
희망이 도움이됩니다.
이를 위해 Strongloop의 cli 도구를 사용합니다. 자세한 내용 은 https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ 를 참조하십시오.
리포지토리 간 전환은 다음과 같이 쉽습니다. slc registry use <name>
2020 년 4 월 13 일부터 다른 범위를 사용할 수 없으면 그러한 기능은 없지만 설치 후 스크립트를 해결 방법으로 사용할 수 있습니다 . 각 npm 설치 후 항상 잘 실행됩니다 .
개인 github 저장소에서 @ foo-org / foo-pack-private 를 설치하도록 .npmrc를 구성 했지만 @ 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에서 시도하지 않도록하고 package.json 및 package-를 확인 하는 --dry-run 플래그 를 추가하는 것을 잊지 마십시오 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
추신. 나는 Windows에 있으며 Bash, CMD 및 Powershell에서 이것을 테스트했습니다. 나도