패키지 매니저(feat. npm)

백지연·2022년 1월 16일
1

NodeJS

목록 보기
8/26
post-thumbnail

프로그램을 만들 때, 모든 모듈을 직접 구현하는 것은 쉽지 않다. 다른 사람이 만들어둔 코드를 사용하는 방법을 소개하고자한다.

이번 포스팅에서는 1. npm 이란?, 2. npm 명령어, 3. npm 패키지 배포에 대해 다뤄보겠다.
책 Node.js 교과서(개정 2판) 책의 5장의 내용을 참고했다.

+모든 코드는 github주소에 있다.


1. npm 이란?

npm

  • Node Package Manager의 약어
  • 특정 기능을 하는 패키지를 사용할 수 있게 함
  • package.json을 만드는 명령어 제공
  • 대부분 오픈소스지만 라이선스(license)별로 제한이 있으므로 설치 전 확인해야 함
  • 패키지: npm에 업로드된 노드 모듈 (패키지는 고유한 '버전' 존재)
  • package.json: 설치한 패키지의 버전을 관리하는 파일
  • 의존 관계: 패키지가 다른 패키지를 사용하는 관계

2. npm 명령어

1. 설치 - 폴더 내에 package.json이 생성됨

npm init

실행화면(console)

** package name은 대문자가 불가능

  • 빨간 박스로 표시한 부분은 직접 입력해야함(나머지는 엔터)
    package name: 배포할 모듈 이름
    author: 내 이름

+각 key에 대한 설명
+노드 패키지의 버전은 항상 세 자리
ex) 1.0.7
1: Major - 하위 호환이 되지 않는 변경 사항
2: Minor - 하위 호환이 되는 변경 사항
3: Patch - 간단한 버그 수정

2. npm 테스트 해보기(scripts에 있는 명령어)

Git [ch5/package.json] - npm init으로 생성된 파일
** json파일은 데이터 형식이라 주석이 불가능

{
  "name": "ch5",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "delay-100",
  "license": "ISC"
}

+package.json 출력 추가 설명
scripts 속성에 명령어 여러 개를 등록해두고 사용할 수 있음(test는 기본적으로 생성)

입력

npm run test

출력

> ch5@1.0.0 test
> echo "Error: no test specified" && exit 1

"Error: no test specified" 

3. package 설치해보기(feat.express)

** express에 대한 내용은 다음 포스팅에서 다룸

  • npm install: package.json 파일에 있는 것 설치 - git clone 등에 사용
  • npm install [패키지명]: 특정 패키지 설치
    ** install 대신 i만 써도 됨(ex. npm i nodemon)

입력

npm install express

출력

added 50 packages, and audited 51 packages in 4s

2 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

다시 package.json을 확인해보자. 내 모듈과 express 모듈이 의존 관계(dependencies)가 생성되었다!

Git [ch5/package.json]

{
  "name": "ch5",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "delay-100",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.2"
  }
}

4. package 설치해보기(feat.nodemon)

입력

npm install --save-dev nodemon

출력(console)

added 116 packages, and audited 167 packages in 6s

17 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

다시 package.json을 확인해보자. 내 모듈과 nodemon 모듈이 dev의존 관계(devDependencies)가 생성되었다!
Git [ch5/package.json]

{
  "name": "ch5",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "delay-100",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.2"
  },
  "devDependencies": {
    "nodemon": "^2.0.15"
  }
}

5. global(전역 설치) 옵션(feat.rimraf)

입력
** 리눅스, 맥은 관리자 권한이 필요하므로 sudo를 맨 앞에 붙혀야 함

npm install --global rimraf

출력

added 12 packages, and audited 13 packages in 1s

2 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

입력

rimraf node_modules

실행화면(디렉토리) - 디렉토리에서 node_modules 폴더가 삭제됨

** package.json 파일만 있으면 npm init을 통해 다시 node_modules 파일을 생성 가능

6. 기타 npm 명령어

  • npm outdated: 업데이트 할 수 있는 패키지가 있는지 확인
  • npm update [패키지명]: 해당 패키지를 업데이트
  • npm uninstall [패키지명]: 해당 패키지를 제거, 패키지가 node_modules폴더와 package.json에서 사라짐
  • npm rm [패키지명]: npm uninstall [패키지명]`과 같음
  • npm search [검색어]: npm의 패키지 검색(https://npmjs.com로 편하게 검색하자)
  • npm info [패키지명]: 패키지의 세부 정보를 파악하고자 할 때 사용
  • npm adduser: npm 로그인을 위한 명령어(패키지 배포 시 npm 가입 필요)
  • npm whoami: 로그인한 사용자가 누구인지 알려줌
  • npm logout: npm adduser로 로그인한 계정을 로그아웃할때 사용
  • npm version [버전]: package.json의 버전을 올림(ex. npm version 5.3.2, npm version minor)
  • npm deprecate [패키지명][버전][메시지]: 해당 패키지를 설치할 때 경고 메시지를 띄움, 자신의 패키지에만 이 명령어를 적용 가능
  • npm publish: 자신이 만든 패키지를 배포할 때 사용
  • npm unpublish: 배포한 패키지를 제거할 때 사용(ex. npm unpublish [패키지명] --force
  • npm ci: package-lock.json에 기반해 패키지를 설치

+그 외는 npm 공식 문서에서 확인


3. npm 패키지 배포

1. npm 홈페이지의 우측 상단의 Sign up (계정 생성)

2. console에서 npm adduser 명령어를 입력해 생성한 계정으로 로그인(사진 참고)
** one-time password는 npm 회원가입 시 썼던 email을 확인하면 됨

3. package.jsonmain을 보면 내 코드는 현재 index.js가 패키지의 진입점(시작 파일)이 된다. 이 파일을 생성해주겠다.

Git [ch5/index.js] - 아무런 의미가 없는 예시 코드

module.exports = () => {
    return 'hello package';
}

4. 패키지 배포 시도
입력(console)

npm publish

실행화면 - error! ch5라는 이름의 모듈이 이미 npm에 존재

5. 패키지 이름 검색(중복 이름 방지)
입력(console)

npm info delay100_first

실행화면 - ERR! 404 (ERR! 404가 뜨면 검색된 패키지가 없다는 것으로, 패키지 이름 가능)

6. 패키지 배포

입력(console)

npm publish

실행화면(console) - 배포 완료

7. 배포한 패키지 삭제 - 24시간 이내에 배포한 패키지만 삭제 가능

입력(console)

npm unpublish delay100_first --force

실행화면(console)

8. 패키지 이름 검색(삭제 확인)

입력(console)

npm info delay100_first

실행화면(console)

profile
TISTORY로 이사중! https://delay100.tistory.com

0개의 댓글