본문 바로가기

개발/Node.JS

npm - npm Publishing Tutorial

 Node.js 두 번째 장에서는 자신의 모듈로 npm 레지스트리를 확장하는 방법


npm 모듈 게시

Node.js 앱을 작성할 때 npm에는 생산성이 높아질 수있는 많은 것들이 있습니다. npm 레지스트리에서 (이미) 사용 가능한 기존 모듈이 있기 때문에 왼쪽부터 문자열을 채우는 것과 같은 저수준의 것을 처리 할 필요가 없습니다.

이 모듈은 어디서 오는 것입니까?

모듈은 CouchDB 인스턴스에 의해 구동되는 거대한 레지스트리에 저장됩니다.

어떻게 모듈이 그것을 레지스트리로 만드나요?

당신 같은 사람은 자신이나 동료를 위해 코드를 작성하고 다른 개발자와 코드를 공유합니다.

언제 출판을 고려해야합니까?

  • 프로젝트간에 코드를 공유하려면,
  • 다른 사람들이 매우 똑같은 문제를 겪을 수 있다고 생각하고 도움을주고 싶다면,
  • 나중에 사용할 수 있다고 생각되는 조금 (또는 그 이상) 코드가 있다면.

모듈 만들기

먼저 모듈을 만드십시오 이전 게시물npm init -y 에서 배웠던 것처럼 모듈 을 처리해야합니다 .

{
  "name": "npm-publishing",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/author/modulename"
  },
  "bugs": {
    "url": "https://github.com/caolan/async/issues"
  },
  "license": "ISC"
}

이 일을 정말로 빨리 끝내자. 이 필드는 package.json다른 사람들이 사용할 모듈을 빌드 할 때 필수 항목입니다.

첫째, namenpm 레지스트리에서 고유해야하므로 모듈에 고유 한 이름을 지정해야합니다. 거기 밖으로 어떤 상표든지와 충돌하지 않는다는 것을 확인하십시오! main사용자가 파일을 찾을 때 반환되는 파일을 설명합니다 require('modulename')기본 파일로 남겨 두거나 프로젝트의 임의의 파일로 설정할 수 있지만 실제로 올바른 파일 이름을 가리키고 있는지 확인하십시오.

keywords 또한 npm이 해당 필드를 기반으로 패키지의 색인을 생성하기 때문에 사람들이 npm의 검색이나 제 3 자 npm 검색 사이트에서 해당 키워드를 검색하면 모듈을 찾을 수 있기 때문에 포함시켜야합니다.

author, 분명히 그것은 당신이 될 것입니다. 그러나 누군가가 당신의 프로젝트를 개발하도록 돕는다면, 그것들을 너무 친절하게 포함 시키십시오! :) 또한 사람들이 원하는 경우 연락 할 수있는 위치를 포함시키는 것이 매우 중요합니다.

repository필드 에서는 코드가 호스팅되는 bugs위치를 볼 수 있으며 패키지에서 패키지를 찾을 수있는 경우 버그를 어디에 기록 할 수 있는지 알려줍니다. 당신이 사용할 수있는 버그 보고서 사이트로 신속하게 이동하려면 npm bug modulename.

# 1 라이선스

견고한 라이센스 및 라이센스 채택은 대기업의 노드 도입에 도움이됩니다 코드는 가치있는 리소스이며이를 공유하는 것은 자체 비용입니다.

라이센스는 정말 힘들지만 이 사이트 는 귀하가 필요로하는 것을 고를 수 있도록 도와줍니다.

일반적으로 사람들이 모듈을 npm에 게시 할 때 MIT 라이센스 를 사용합니다 .

MIT 라이센스는 매사추세츠 공과 대학 (MIT)에서 기인 한 자유 소프트웨어 라이센스입니다. 허가 된 라이센스로서, 재사용에 대한 제한이 매우 제한적이므로 라이센스 호환성이 뛰어납니다.

# 2 시맨틱 버전 관리

버전 관리는 자체 섹션을 가질만큼 중요합니다.

npm 레지스트리에있는 대부분의 모듈은 의미 론적 버전 지정이라는 사양을 따릅니다. 시맨틱 버전은 소프트웨어의 버전을 "."-로 구분 된 3 개의 숫자로 나타냅니다. 소프트웨어 자체가 변경되었을 때이 버전 번호를 어떻게 변경해야하는지 설명합니다.

버전 번호 MAJOR.MINOR.PATCH가 주어지면, 다음을 증가 시키십시오 :

  • 호환되지 않는 API 변경 사항을 만들 때 MAJOR 버전,
  • 하위 버전과 호환되는 기능을 추가 할 때 MINOR 버전
  • 패치 버전은 이전 버전과 호환되는 버그 수정을 할 때 사용됩니다.

시험판 및 빌드 메타 데이터에 대한 추가 레이블은 MAJOR.MINOR.PATCH 형식의 확장으로 사용할 수 있습니다.

이 숫자는 기계가 아니라 인간을위한 것입니다! 주 버전을 자주 변경할 때 사람들이 귀하의 라이브러리 사용을 권장하지 않는다고 가정하지 마십시오.

1.0에서 버전 관리를 시작해야합니다!

대부분의 사람들은 소프트웨어가 아직 "베타"단계에있는 동안 변경 작업을 수행하면 의미 론적 버전 관리를 존중해서는 안된다고 생각합니다. 그들은 틀렸다! 베타 단계에서도 사용자에게 깨어있는 변경 사항 을 알리는 것이 중요합니다 프로젝트를 실험하고 싶은 사용자를 항상 생각해보십시오.

# 3 문서

코드를 다른 사람들과 공유하고 싶다면 적절한 문서화가 필요합니다. 퍼팅 README.md프로젝트의 루트 폴더에 파일은 일반적으로 충분합니다, 당신은 레지스트리 NPM에 게시 할 경우 같은 사이트 생성 이 하나 . 자동으로 완료되며 다른 사람들이 귀하의 코드를 사용하려고 할 때 도움이됩니다.

게시하기 전에 모든 문서가 제 위치에 있고 최신 상태인지 확인하십시오.

# 4 패키지에서 비밀 파일 유지하기

특정 파일을 사용하면 .npmignore비밀 또는 개인 파일이 게시되지 않습니다. 그것을 이용하여 .npmignore업로드하지 않으려는 파일을 추가하십시오 .

당신이 사용하는 경우 .gitignoreNPM은 기본적으로 너무 그것을 사용합니다. 자식처럼, NPM은 찾습니다 .npmignore및 .gitignore루트 디렉토리에뿐만 아니라, 패키지의 모든 하위 디렉토리에있는 파일.

# 5 기부 권장

코드를 공개 할 때 기여 방법에 대한 지침을 추가하는 것을 고려해야합니다. 소프트웨어 버그를 다루고 모듈에 새로운 기능을 추가하는 방법을 알고 있는지 확인하십시오.

사용할 수있는 몇 가지가 있지만 일반적으로 github의 문제 및 풀 요청 템플릿 을 사용해야합니다 .

npm 게시

이제 첫 번째 모듈을 게시하는 데 필요한 모든 것을 이해했습니다. 이렇게하려면 다음을 입력 npm publish하면됩니다. npm-cli가 코드를 레지스트리로 업로드합니다.

축하합니다. 이제 모듈이 npm 레지스트리에 공개됩니다! 
www.npmjs.com/package/yourpackagename공개 URL을 방문하십시오 .

npm에 공개 된 것을 공개한다면, 영원히 거기에 머무를 것입니다. 발견 할 수 없게 만들 수있는 방법은 거의 없습니다. 공용 레지스트리에 도달하면 연결된 모든 다른 복제본 이 모든 데이터를 복사합니다. 게시 할 때주의하십시오.

내가 의미하지 않은 것을 출판했다.

우린 인간이야. 우리는 실수를하지만, 지금은 무엇을 할 수 있습니까? 최근의 좌파 스캔들이후 npm은 공개되지 않은 정책을 변경했습니다. 레지스트리에 패키지에 의존하는 패키지가 없으면 게시를 취소해도되지만 모든 복제본이 모든 데이터를 복사하여 누군가 다른 사람이 항상 가져올 수 있도록합니다. 비밀 정보가 포함되어 있다면 법 이후에 정보를 변경하고 .npmignore다음 공개 를 위해 파일에 정보 를 추가해야합니다 .

비공개 범위 패키지

공개 레지스트리에 코드를 공개하지 않거나 (회사의 이유로) npm을 사용하면 조직에서 공개하지 않고 레지스트리로 푸시 할 수 있도록 조직 계정을 열 수 있습니다. 이렇게하면 당신과 당신의 동료들간에 개인 코드를 공유 할 수 있습니다.


npm enterprise

레지스트리를 직접 실행하여 보안을 강화하려면이를 쉽게 수행 할 수 있습니다. npm에는 회사 방화벽 뒤에서 실행할 수있는 온 프레미스 버전이 있습니다. npm enterprise 설정 에 대해 자세히 읽어보십시오 .