프로그램을 만들 때, 모든 모듈을 직접 구현하는 것은 쉽지 않다. 다른 사람이 만들어둔 코드를 사용하는 방법을 소개하고자한다.
이번 포스팅에서는 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
)
- install 대신
입력
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 [패키지명] --forcenpm ci
:package-lock.json
에 기반해 패키지를 설치
+그 외는 npm 공식 문서에서 확인
3. npm 패키지 배포
1. npm 홈페이지의 우측 상단의 Sign up (계정 생성)
2. console에서 npm adduser
명령어를 입력해 생성한 계정으로 로그인(사진 참고)
** one-time password는 npm 회원가입 시 썼던 email을 확인하면 됨
3. package.json
에 main
을 보면 내 코드는 현재 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)
'Study > Node.js' 카테고리의 다른 글
9 - express 웹 서버 만들기 -2(multer, 라우팅 분리, req, res, +전체 코드) (0) | 2022.06.13 |
---|---|
8 - express 웹 서버 만들기 -1(express, middleware, 자주쓰는 패키지) (0) | 2022.06.13 |
6 - http 모듈로 서버 만들기 (0) | 2022.06.13 |
5 - Node 기능 알아보기 - 3(Node 내장 모듈, 파일 시스템, 이벤트, 예외 처리) (0) | 2022.06.13 |
4 - Node 기능 알아보기 - 2(내장 객체) (0) | 2022.06.13 |