NPM

2021-12-19

프론트앤드 스터디에서 진행한 NPM에 대한 발표자료

NPM

우선, npm에 대해 설명하기 전에 모듈에 대해 좀 짚고 넘어갈 필요성이 있다.

모듈화

📂 모듈 : 애플리케이션을 구성하는 개별적 요소
모듈은 개별적으로 존재하다가 필요에 따라 명시적으로 모듈을 로드해서 사용 가능
→ 효율성, 유지보수성 ⬆️

NPM (Node Package Manager)

  • 모듈들을 패키지화하여 모아둔 저장소 역할과 패키지 설치 및 관리 역할
  • npm으로 자신이 작성한 패키지를 배포해서 공개할 수도 있고 필요한 패키지들을 검색해서 사용할 수도 있다.
  1. 패키지 관리
  2. 패키지의 버전관리

NPM 설치

  • 아마 프론트앤드 개발을 하면서 터미널에 가장 많이 작성한 키워드 중에 하나일 것.

  • node.js 를 설치하면 자동으로 설치

NPM으로 모듈 다운로드하기

  • 옵션을 별도로 지정하지 않으면 지역으로 설치되며, 프로젝트 루트 디렉터리에 node_modules 안에 패키지가 설치된다. 지역으로 설치된 패키지는 해당 프로젝트 내에서만 사용할 수 있다.

지역설치 (default)

npm install [packageName]

전역설치

전역으로 설치하면 모든 프로젝트에서 사용가능하다.

npm install -g [packageName]

Package.json

npm init

  • 프로젝트에서는 많은 패키지를 사용하게 되고 패키지의 버전도 빈번하게 업데이트되므로 프로젝트가 의존하고 있는 패키지를 일괄 관리할 필요가 있다.
    npm은 package.json 파일을 통해서 프로젝트 정보와 패키지의 의존성(dependency)을 관리한다. 이미 작성된 package.json이 있다면 팀 내에 배포하여 동일한 개발 환경을 빠르게 구축할 수 있는 장점이 있다.

🧾 모듈들의 버전을 명시한 명세서

dependencies vs devDependencies

  • dependencies프로덕션 환경에서 응용 프로그램에 필요한 패키지.
  • devDependencies로컬 개발 및 테스트에만 필요한 패키지.

package.json vs package.lock.json

  • package.json: version range (버전의 범위를 명시)

🌳 개발자들이 서로 같은 node_modules 트리를 갖도록 하는 역할

scripts

  • 우리가 run 명령어를 통해서 실행할 것들을 적어두는 것
"scripts": {
    "start": "npm run dev",
		"hello-world": "echo 'Hello World'",
    "prettier": "prettier --write --config ./prettier.config.js './src/**/*.{ts,tsx}'",
    "lint": "eslint './src/**/*.{ts,tsx,js,jsx}'",
    "lint:fix": "eslint --fix './src/**/*.{ts,tsx,js,jsx}'"
  },

NPM 배포하기

  1. 배포가 가능한 패키지명인지 확인
npm info [packageName]
  1. 필요한 정보 입력 (version, description...)
npm init
  1. 로그인
npm login
  1. npmignore
  2. 배포
npm publish
  • 버전관리 (Semver: Semantic Versioning)
npm version major   # package.json파일 version의 첫 번째 숫자 (v1.0.0 -> v2.0.0)
npm version minor   # package.json파일 version의 두 번째 숫자 (v1.0.0 -> v1.1.0)
npm version patch   # package.json파일 version의 세 번째 숫자 (v1.0.0 -> v1.0.1)

NPM vs yarn

npm을 대응하는 오픈소스 라이브러리 중에는 여러가지가 있는데 그 중에 가장 유명하고 사람들이 많이 사용하는게 yarn

yarn과의 차이점

  1. 속도
    → yarn은 병렬 처리

  2. 보안
    → npm은 의존 관계를 가지는 다른 패키지들이 즉시 포함되도록 한다.
    반면 yarn은 yarn.lock이나 package.json 파일에 있는 것들만 설치를 한다.