알다시피, 사실상 JavaScript 패키지 관리자는 npm이며 레지스트리는 세계에서 가장 큰 코드 집합입니다. 그러나 때로는 멋진 새 패키지를 개발할 때 추가 프라이버시 보호가 필요합니다. 대중과 공유할 수 없는 회사 프로젝트나 석사/학부 논문 프로젝트를 진행하고 있거나 단순히 나(필자)처럼 새로운 주제의 첫 단계를 부끄럽게 생각하기 때문입니다.
이유가 무엇이든 몇 가지 옵션이 있습니다. 아마도 가장 쉬운 방법은 npm의 유료 제안 중 하나에 가입하는 것입니다. 그러나 모두에는 적합하지는 않은 가격입니다.
다행스럽게도 Verdaccio라는 무료 대안이 있습니다.
Verdaccio는 설정(configuration) 없이 로컬 npm 레지스트리를 만들 수있는 npm 패키지입니다. 자체 데이터베이스와 함께 제공되는 배터리(batteries)가 포함된 프로젝트입니다. 로컬 caching/proxy 서버 역할을 함으로써 그렇게 합니다.
이는 존재하지 않는 커스텀 저장소에서 무언가를 설치하려고 할 때 공식 npm 레지스트리에 ping을 하고 의존성(dependencies)을 다운로드 함을 의미합니다. 사용자 지정 저장소는 storage 라는 폴더 안에 보관합니다. 다음 설치는 이 로컬 캐시 사본을 사용합니다. 또한 npm login/adduser/publish
와 같은 npm 클라이언트의 일부 커맨드가 지원되도록 복제(replicated)됩니다.
새롭지 않다고 생각한다면 이미 Sinopia가 있습니다. Verdaccio는 단순히 이전 버전과의 호환성을 유지하면서 공식 npm 변경 사항을 유지하려고하는 Sinopia의 포크(fork)입니다. Sinopia에서 사용할 수 없는 변경 중 하나는 스코프 패키지(scoped packages)로, Angular 2 또는 TypeScript npm 호스팅 유형과 같은 라이브러리로 작업 할 때 이미 보았을 수 있습니다. @ 기호로 쉽게 인식 할 수 있습니다.
# Angular2 의존성 설치
npm install @angular/core
# TypeScript의 공식 Node.js 타입 정의(type definitions) 설치
npm install @types/node
Sinopia와 Verdaccio는 모두 Mac/Linux 및 Windows에서 작동합니다.
Verdaccio는 npm 패키지이므로 다음 명령을 실행하여 설치하면 됩니다.
npm install -g verdaccio
verdaccio
를 실행한 후의 호출은 인스턴스를 시작하고 비공개 레지스트리를 실행합니다.
기본적으로 포트 4873에서 수신 대기합니다. 나중에 해당 설정을 변경하는 방법에 대해 설명하겠습니다.
이 아티클에서는 개발 시스템에서 레지스트리를 설정합니다. 회사 환경에서는 모든 개발자가 액세스 할 수 있도록 전용 서버에서 이 작업을 수행 할 수 있습니다.
Verdaccio는 Node.js 응용 프로그램으로, 충돌이 발생할 경우 다시 시작해야합니다. pm2를 사용하는 것이 좋습니다. 다음 단계를 수행하기만 하면됩니다.
# pm2 설치
npm install pm2 -g
# pm2를 이용한 verdaccio 실행
pm2 start PATH-TO-GLOBAL-VERDACCIO/verdaccio
# e.g for Windows: C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio
또한 아티클이 끝날 때 Verdaccio가 자신에게 적합한 도구가 아니라는 결론에 도달한다면 프로세스를 중지하고 다음과 같이 Verdaccio를 제거하십시오.
npm uninstall -g verdaccio
이제 레지스트리가 시작되어 npm 클라이언트를 새 주소로 지정해야합니다. 다음 명령을 실행하면됩니다.
npm set registry http://localhost:4873/
이 아티클의 단계를 따르고 나중에 기존 npm 레지스트리로 되돌리려면 HTTPS 기반 액세스의 경우
npm set registry https://registry.npmjs.org
또는 클래식 HTTP 액세스를 위한npm set registry http://registry.npmjs.org
명령을 실행하십시오.
또한 HTTPS를 통해 레지스트리를 제공하는 경우 적절한 CA 정보를 설정해야합니다.
# 값을 null로 설정하면 운영 체제에서 제공 한 목록이 사용됩니다.
npm set ca null
이제 http://localhost:4873
주소로 이동하여 레지스트리 브라우저에 액세스 할 수 있습니다.
서버가 시작되면 config.yaml
이라는 새 설정 파일(configuration file)이 자동으로 생성됩니다. 기본적으로 users
폴더에 생성됩니다. Windows에서는 다음과 같이 보일 수 있습니다.
C:\Users\[USERNAME]\.config\verdaccio\config.yaml
한 가지 중요한 설정은 Verdaccio가 수신하는 기본 포트를 설정하는 것입니다. 설정 파일 끝에 다음 줄을 추가하여 변경할 수 있습니다.
listen:
- http://localhost:[YOURPORT]
또 다른 관심 설정은 특히 회사 환경에서 프록시를 사용하는 것입니다. 이들은 다음 항목으로 설정됩니다.
http_proxy: http://something.local/
https_proxy: https://something.local/
no_proxy: localhost,127.0.0.1
현재 프로세스를 종료하거나 pm2 프로세스를 중지하고 설정을 변경 한 후 다시 시작하여 Verdaccio를 다시 시작하십시오.
마지막으로 패키지를 레지스트리에 게시 할 사용자를 설정해야합니다. 기본 adduser 명령으로 사용자 정의 레지스트리를 지정할 수 있습니다.
npm adduser --registry http://localhost:4873
그런 다음 커맨드라인의 프롬프트를 따르십시오.
사용자는 Verdaccio 인스턴스에 대해 인증하는데 사용됩니다. 위에서 언급한 config.yaml
파일 옆에 로그인과 자격 증명을 저장하는 데 사용되는 새로 만든 htpasswd
가 있습니다.
이제 첫 번째 비공개 패키지를 만들 준비가되었습니다. 간단한 hello-world
패키지를 만들고 게시(publishing) 프로세스를 살펴 보겠습니다.
먼저 hello-world
라는 새 폴더를 만듭니다. 이제 npm init
명령으로 새 패키지를 시작해야 합니다. 많은 질문이 나오지만 지금은 대부분 기본값(defaults) 선택하면 됩니다. description을 적고 index.js
에 진입점(entry point)을 유지한 후 이름을 author에 추가하십시오. 이 작업의 결과는 패키지를 설명하는 package.json
이라는 파일입니다.
비공개 로컬 또는 공식 npm 소스를 사용 중인지 즉시 알 수 있도록 패키지 이름을 접두어로 사용하는 것이 좋습니다.
다음 파트는 실제 패키지를 만드는 것입니다. index.js 파일을 만듭니다. 이 간단한 예제는 HelloWorld 함수를 내보냅니다.
// index.js의 내용
function HelloWorld() {
return "Hello World";
}
module.exports = HelloWorld;
이제 남은 것은 패키지를 게시하는 것입니다. 먼저 npm login
으로 레지스트리에 로그인해야 합니다. 이전에 설정한 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다.
이제 hello-world
의 루트에서 npm publish
를 실행하면 매직이 완료됩니다.
http://localhost:4873/을 다시 방문하면 목록에 새로운 패키지가 포함된 것을 볼 수 있습니다.
비공개 패키지를 게시 했으므로 간단한 데모 앱을 만들어 사용하겠습니다.
새 폴더 demo
에서 npm init
를 사용하여 새 node 앱을 다시 만듭니다. 다시 한 번 모든 권장 사항을 수락하고 설명과 작성자 정보를 추가하십시오
그런 다음 앱의 루트 역할을하는 index.js
를 만듭니다.
비공개 패키지를 설치하려면 표준 npm 프로세스와 동일한 작업을 수행해야합니다.
npm install --save hello-world
패키지를 node_modules
폴더에 설치하고 package.json
의 dependencies 섹션을 업데이트합니다.
이제 패키지를 사용할 준비가되었습니다. index.js
를 열고 다음 코드를 추가하십시오.
const helloWorld = require("hello-world");
console.log(helloWorld());
이제 node index.js
로 앱을 실행하면 Hello World가 명령 행에 출력으로 표시됩니다.
축하합니다. 방금 비공개 패키지를 게시하고 사용했습니다.
공개npm install package-name
을 실행하면 node_modules
폴더에 평소대로 설치됩니다.
Verdaccio가 씬(scenes) 뒤에서 하는 일은 스토리지 폴더를 살펴보고 요청 된 패키지가 존재하는지 확인하는 것입니다. 패키지가 없는 경우 요청을 공식 npm 레지스트리로 전달하고 다운로드하여 저장 한 후 요청에 응답합니다. 다음 동일 패키지의 npm install 실행시 정확히 해당 패키지를 제공합니다.
따라서 공개 레지스트리가 다운되었거나 어떤 이유로 도달 할 수 없는 경우에도 자체 캐시 버전에 액세스 할 수 있습니다. Verdaccio는 항상 요청한 것을 정확하게 다운로드합니다. 일부 업데이트를 발행하면 필요에 따라 업데이트가 다운로드됩니다.
레지스트리 브라우저에는 공개 패키지가 표시되지 않습니다. 실제로 표시해야하는 경우
.sinopia-db.json
파일을 편집하고 패키지 이름을list
배열에 수동으로 추가 할 수 있습니다. 나중에 Verdaccio를 다시 시작하는 것을 잊지 마십시오.
이제 비공개 레지스트리를 호스팅하고 캐시 된 공개 패키지를 활용할 수 있습니다. 또한 클라우드와 통신하지 않고도 비공개 패키지를 게시 할 수도 있습니다. 설치가 완료되면 모든 관련 npm 클라이언트 커맨드는 평소와 동일합니다.
그리고 일부 패키지가 손상된 경우에는 패키지를 호스팅하는 폴더는 storage
뿐이므로 해당 패키지로 이동하여 결함이있는 패키지를 삭제하십시오. 다시 설치하면 문제가 해결 될 것입니다.
나는 당신이 이 아티클을 즐겼기를 바랍니다. 당신의 의견을 기다리겠습니다!