JavaScript
[JS중급] 서드파티모듈과 npm
염두리안
2024. 12. 1. 17:26
728x90
반응형
- 모듈 검색 순서
- require() : 함수 안 인자를 보고 알맞은 모듈을 로드함
- reuqire()에 경로 표시가 없음 → node_modules 디렉토리 내에 그런 파일이 없음 → node_modules 디렉토리 내에 그런 디렉토리가 있음 → 디렉토리 안에 package.json 파일이 있음 → main 필드에 적힌 파일 로드(main 필드가 없다면 index.js 파일 로드)
- package.json이라는 파일을 가진 디렉토리가 패키지다 | 하나의 서드파티모듈은 하나의 패키지다 | 서드파티모듈을 관리할 때 쓰는 npm은 node package manager의 줄임말이다
- package.json 파일에서 알아야할 필드
- name: 패키지 이름 | require 함수 인자로 넣는 것
- version: 패키지 버전 | name+version => 특정 패키지의 특정 버전을 나타낼 수 있음
- description: 패키지에 관한 설명 | 패키지 검색시 여기 있는 내용도 검색 기준으로 활용되기에 자신의 패키지가 잘 검색되도록 하려면 여기에 알맞은 설명을 써야 함
- keywords: 패키지에 관한 키워드
- homepage: 패키지 관련 url | 보통 패키지 관련 커뮤니티의 홈페이지 주소가 있는 경우가 많음
- bugs: 패키지 사용하다가 발생하는 버그들을 신고할 수 있는 url이나 이메일 주소가 적혀있음
- license: 패키지의 라이센스 정보
- author, contributors: author(패키지만든사람), contributors(패키지 만드는데 기여한 사람)
- main: 패키지 로드시 실제로 로드되는 파일의 이름이 적혀있는 필드
- man: 패키지 사용 설명서가 담긴 파일들의 경로
- repository: 패키지의 코드가 관리되고 있는 레포지토리의 주소(보통 깃주소)
- scripts: npm으로 간단히 실행할 수 있는 스크립트 파일들의 정보가 담겨 있음
- dependencies: 현재 패키지가 의존하고 있는 다른 패키지들이 나열되어 있는 필드
- Semantic Version: 의미론적 버전 | X.Y.Z
- X : 메이저 버전 | 이전 버전의 API와 호환되지 않는(not backward-compatible) API 상의 변화가 발생했을 때 업데이트
- Y : 마이너 버전 | API와 호환되는(backward-compatible) API 상의 변화가 발생했을 때 업데이트
- Z : 패치 버전 | API에 변화를 주지 않는 범위 내에서 변화가 이루어진 경우에 업데이트
- Basic Syntax) >, >=, <, ||, < 사용해서 나타냄 | "test":"2.3.1 || ≥2.5.0 <3.1.2"
- Advanced Syntax
- Hyphen Range) "test": "2.3.1 - 3.1.2"
- X-range) "test": "*" - 모든버전상관X | "test": "3.x" - x에 어떤 버전 들어가도 상관 X
- Tilde Range) "test": "~3.1.2" - 패치 버전 업데이트까지만 허용하고, 마이너 버전이 없으면 마이너 버전 업데이트까지 허락
- Create Range) "test": "^1.2.3" - 가장 왼쪽의 0이 아닌 버전이 바뀌지 않는 선에서 버전 업데이트만 허용
- 패키지 만들기
npm init



- 패키지 업로드
npm login
npm whoami // 인증된 사용자 확인
npm publish
// 패키지 버전 업데이트
npm version [새로운 버전]
npm publish
// 공개된 패키지 다시 내리기
npm unpublish [패키지 이름]@[버전]
// 모든 버전 패키지 없애기
npm unpublish [패키지 이름] --force
- 패키지간 의존 관계 위험성
- 악성코드 문제
- 패키지 내 코드 취약점 문제 : npm outdated(현재 패키지에 설치된 하위 패키지들 중 버전이 최신이 아닌 것들이 무엇이 있는지 보여줌), npm update(최신 패키지로 업데이트) 정기적으로 실행 | npm audit, npm audit fix로 취약점 점검
- 패키지 가용성 문제
- nodemon : 파일의 코드 변화를 알아서 감지해서 자동으로 재실행해줌
- -g 옵션: global(전역) 설치 | 패키지를 하나의 실행 파일처럼 사용함 | node_modules 디렉토리 말고 {prefix}/lib/node_modules 에 설치(prefix는 npm에 관한 여러 기본 설정값 중 하나)
- -g 옵션을 주지 않고 설치하면, local mode 설치가 됨 → node_modules 디렉토리에 설치
- -g 옵션: global(전역) 설치 | 패키지를 하나의 실행 파일처럼 사용함 | node_modules 디렉토리 말고 {prefix}/lib/node_modules 에 설치(prefix는 npm에 관한 여러 기본 설정값 중 하나)
npm install -g nodemon
nodemon main.js
- 여러 npm 명령어
// 특정 패키지 검색
npm search [패키지명]
// 특정 패키지 정보 조회
npm info [패키지명]
// 의존 패키지 확인
npm list
// 패키지 삭제
npm uninstall [패키지명]
728x90
반응형