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 디렉토리에 설치
npm install -g nodemon
nodemon main.js
  • 여러 npm 명령어
// 특정 패키지 검색
npm search [패키지명]

// 특정 패키지 정보 조회
npm info [패키지명]

// 의존 패키지 확인
npm list

// 패키지 삭제
npm uninstall [패키지명]
728x90
반응형