npm 만들기


NPM(Node Package Manager)은 이름에서 알수 있듯이, 노드를 패키지로 만들어 관리해주는 역할한다.  오픈소스개발자가 만든 자신의 모듈(라이브러리)를 공개된 레지스트리에 등록하고 공유하여 여러사람이 사용할수 있게 관리하는게 목적이다. 여기서 앞글자가 Module 아닌 Node라고 했던 것은 npm이 처음 생겼을때 Node.js용 패키지 관리자로 생성되었기 때문이라고 알려져 있다.

기본적으로 node.js를 단, 한번이라도 사용해본 개발자라면 npm에 대하여 깊이 생각해본적은 없을지라도 모듈에 대한 개념과 필요한 모듈이 있을 경우 git을 통해 내려받고 설치하고 등등 npm install 명령어를 자주 접했을 것이다.

여기서는 그렇게 다른 개발자들이 만들어 올려둔 모듈을 사용하는것이 아니라 직접 만들어 배포하기 위해서는 어떻게 해야 하는지에 대한 내용을 작성하려고 한다.


npm 모듈을 만들어 배포하고 사용하는 개념을 그림을 간단히 표현하면 다음과 같다.

그림처럼 npm을 모듈을 만들어 배포하고 사용하기 위해서는 npm을 등록/저장하기위해 np에 멤버 가입 및 로그인이 필요하다. 가입과 사용은 무료이며, 비용(월 약 7$)을 지불하고 유로로 전환하면 비공개/개인적용도로 사용이 가능하다.

npm 생성 초기화

아래와 같은 명령어를 입력하여 npm 패키지를 만들기 위한 초기화를 수행하자.


패키지 초기 설정과 관련된 입력을 해야하는데 자신의 프로젝트에 맞도록 입력하면된다. 엔터를 입력하면 괄호 안에 있는 내용으로 자동입력되고 다음으로 넘어간다.
  • package name : 배포될 모듈명 
  • version : 배포 버전
  • description : 패키지 설명
  • entry point : 배포될 패키지의 진입 점(default export/import 대상 파일)
나머지는 그냥 엔터로 패스하도록 하자. 명령어를 입력한 디렉토리에 보면 아래와 같은 package.json 파일이 생성된 것을 확인 할수 있다.

package.json 생성 확인


package.json 파일이 생성된 디렉토리에서 패키지의 entry point 파일인 index.js를 생성하자.

npm 배포를 위한 로그인

npm 배포를 위해서는 아래와 같이 npm 레지스트리 사이트에 회원가입 및 로그인을 해야 한다. 회원가입은 해당 사이트(https://www.npmjs.com)에서 쉽게 할 수 있다.


Email의 경우 회원가입시 입력한 이메일 주소를 입력한다.

npm 배포

배포를 위해서 아래의 명령어를 입력하자. 


정상적으로 배포 될 경우 위와 같은 화면이 표시된다. 그리고 사이트에 접속하여 등록된 패키지를 확인할 수 있다.



혹시라도 오류가 발생한다면 아래와 같은 경우일 수 있으니 자세한 내용은 검색을 통해 해결하자.
  • npmjs.com의 이메일 인증을 받지 않은 경우
  • 패키지명이 중복된 경우(error code E403) : npm info [패키지명] 으로 중복 확이 가능
  • proxy or network에 문제가 있는 경우
  • 해당 패키지의 버전이 이미 존재하는 경우

패키지 설명 및 버전관리(README.md)

패키지의 설명과 버전 관리를 위해 README.md 파일을 생성하고 버전 관리에 대한 히스토리 및 패키지에 대한 설명을 추가하도록 하자. 위 파일은 해당 패키지를 검색했을 때, README.md 파일에 작성한 내용이 패키지으 메인에 표시되기 때문이다.

패키지 재배포

패키지를 재배포하기 위해서는 아래와 같이 version을 변경해줘야한다. 동일한 버전이 존재할경우 패키지를 등록할때 오류가 발생한다. 아래와 같이 patch를 사용하면 자동으로 패키지명으로 올려주며, 직접 수정을 원하면 npm version <major 또는 minor 또는 patch>를 사용하거나 package.json에서 직접 수정해도 된다. 명령어를 사용하면 package.json도 자동 수정된다.

$ npm version patch
v0.0.2
$ npm publish

npm version patch로 버전을 업데이트해주고, npm publish로 재배포하자.

정상적으로 배포될 경우 아래와 같은 화면이 표시된다.



패키지 확인

아래와 같이 패키지를 사이트에서 확인할 수 있으며, 해당 패키지를 이제 우리가 알고 있는 명령어인 npm i [패키지명]으로 설치하는 것이 가능해졌다.


배포한 패키지 삭제

배포한 패키지는 npm unpublish 커맨드를 이용해서 배포 후 72시간 내에 삭제 가능하다 (그 이후에는 npm 측에 직접 연락해서 삭제 요청을 해야한다)


배포한 패키지의 특정 버전을 삭제하려면 npm unpublish <패키지명>@<버전> 커맨드를 이용하면 된다.

$ npm unpublish xxx-npm@0.0.1
- xxxx-npm@0.0.1


배포한 패키지의 모든 버전을 삭제하려면 npm unpublish <패키지명> -f 커맨드를 이용합니다.

npm unpublish xxx-npm -f
npm WARN using --force I sure hope you know what you are doing.
- @xxx-npm



배포한 패키지 사용

이제 사용하고자 하는 프로젝트 폴더에서 아래와 같이 npm i 명령어를 통해 배포한 패키지를 설치하고 사용해보자.


위 그림에서 보는 것과 같이 패키지가 정상적으로 설치 되었다. 또한 node-module 디렉토리 아래에 해당 패키지의 폴더가 생성되고 그 아래에 패키지 파일들이 생성된 것을 확인 할 수 있다.

패키지 사용은 알다시피 아래와 같이 사용하고자 하는 파일에 import 하면된다.

import testui from 'txx-xxx-xe'

console.log(testui.ko)


아래와 같이 사이트를 실행하여 정상적으로 동작하는 것을 콘솔에서 확인해 볼 수 있다.



scope

npm 사용자 계정에 가입하거나 Org.를 만들면 사용자, Org. 이름과 일치하는 범위가 부여됨. 이 범위를 관련 패키지의 네임 스페이스로 사용할 수 있다.
스코프를 사용하면 충돌없이 다른 사용자나 Org.이 만든 패키지와 이름이 같은 패키지를 만들 수 있다. @과 /사이가 스크프이다.
@npm/package-name


scoped and package

  • unscoped 패키지는 항상 public
  • private 패키지는 항상 scoped 패키지여야 함
  • scoped 패키지는 디폴트로 private이기 때문에, 공개할 경우 커맨드 라인에 플래그를 명시해야함
username 이 아닌 스코프를 사용하고 싶다면 Org. 를 만들어야 한다.(https://www.npmjs.com/org/create)

댓글

이 블로그의 인기 게시물

[JAVA] 변수란? 변수타입?

[JAVA] 문자셋(Charset)

[JAVA] 문자열 비교[== vs equals()]의 차이