Programing Language/Javascript

npm과 yarn

jheaon 2023. 9. 2. 16:58

 

node로 프로젝트를 진행하다 보면 많이 쓰이는 패키지 관리 툴로는 npm과 yarn이 있다. 나는 주로 npm을 이용하여 패키지를 관리했었는데, 다른 프런트 사람들의 프로젝트를 보니 yarn을 쓰는 사람의 수도 적지 않아서 한번 개념을 정리하고자 글을 작성한다. 

 

npm

npm(Node Package Manager)은 자바 스크립트 언어를 위한 패키지 관리자로, Node.js의 기본 패키지 관리자이다. 전 세계적으로 많은 사람들이 사용하고 있으며 node.js로 만들어진 모듈을 쉽게 관리하도록 도와주는 프로그램이다. 

 

아래는 주로 사용하는 npm 명령어이다. 

 

  • npm init : package.json 생성
  • npm install : package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치
  • npm install package_name@버전 : 특정 패키지의 특정 버전 설치
  • npm install 주소 : 특정 저장소 내 패키지 설치. 주로 github을 이와 같이 설치합니다.
  • npm install package_name -g : 옵션. 글로벌로 설치. 로컬의 다른 프로젝트도 이 패키지를 사용 가능하게 됩니다.
  • npm uninstall : 패키지 삭제 명령어입니다.
  • npm update : 설치한 패키지들을 업데이트해 줍니다.
  • npm dedupe : 중복 설치된 패키지들을 정리해 주는 명령어입니다.

 

package.json

package.json은 프로젝트 정보와 의존성을 관리하는 문서이다. 우리가 어떤 패키지를 사용하는지, 어떤 버전을 사용하지는 등을 기록함으로써 동일한 개발 환경을 구축할 수 있도록 한다. python에 비유하자면 requirements.txt와 같은 역할을 한다.

 

🖥️ package.json

{
  "name": "yongseong",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "4.0.3",
    "web-vitals": "^1.0.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }

 

 

 

yarn

yarn은 페이스북에서 만든 자바스크립트 패키지 매니저이다. npm과 같은 역할을 수행하지만 npm의 속도, 안정성, 보안성의 단점을 보완하여 만들어진 패키지 관리 툴이다. 

 

  • 속도 : yarn은 다운로드한 패키지 데이터를 캐시에 저장하여 중복된 데이터는 다운로드하지 않고, 캐시에 저장된 파일을 활용함으로써 이론적으로 npm에 비해 패키지 설치속도가 매우 빠르다. 또한 여러 개의 패키지를 설치할 때 병렬로 처리하기 때문에 성능과 속도면에서 빠르다. 
  • 안정성, 보안성 : npm은 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용하는데 이 특징은 편리한 기능이지만 안정성을 위협할 수 있다는 단점이 있다. 특히 보장된 정책 없이 등록한 패키지가 존재할 수 있다는 점에서 더욱 위험도가 높다. 하지만 yarn는 yarn.lock이나 package.json으로부터 설치만 하며, yarn.lock은 모든 디바이스에 같은 패키지를 설치하는 것을 보장하기 때문에 버전의 차이로 인해 생기는 버그를 방지할 수 있다. 

 

아래는 주로 사용하는 yarn의 명령어이다.

  • yarn init : package.json 생성
  • yarn or yarn install : package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치
  • yarn add package_name@버전 : 특정 패키지의 특정 버전 설치
  • yarn add 주소 : 특정 저장소 내 패키지 설치. 주로 github을 이와 같이 설치합니다.
  • yarn global add package_name : 옵션. 글로벌로 설치. 로컬의 다른 프로젝트도 이 패키지를 사용 가능하게 됩니다.
  • yarn remove : 패키지 삭제 명령어입니다.
  • yarn upgrade : 설치한 패키지들을 업데이트해 줍니다.
  • npm dedupe : 중복 설치된 패키지들을 정리해 주는 명령어입니다.

 

npm vs yarn

yarn이 npm에 비해 향상된 것이 있으나, npm 또한 몇 년간 발전을 거듭하며 단점을 많이 보완했기 때문에 현재 npm/yarn의 성능과 안정성 차이는 크게 나지 않는다. 다만 yarn의 병렬적 패키지 설치로 인한 가벼움과 버전차이로 인한 버그 방지등의 기능은 yarn이 npm보다 더 좋다는 점은 사실이다. 하지만 npm 또한 사용자 수가 많다는 점과 그에 따른 접근성을 가지고 있기에 npm, yarn을 선택하는 부분에 있어서는 개발자의 재량에 따라 달라질 수 있다고 보고 있다. 

 

단 npm와 yarn 2개의 패키지 매니저를 프로젝트 내에서 동시에 쓰는 경우에는 package-lock.json과 yarn.lock 2개의 기준이 생겨버려 후에 프로젝트의 통일성이 보장이 되지 않음으로 이런 상황은 피하는 것이 좋다. 

 

 


참고 : 

https://velog.io/@kysung95/%EA%B0%9C%EB%B0%9C%EC%83%81%EC%8B%9D-npm%EA%B3%BC-yarn

 

[개발상식] npm과 yarn

패키지 관리 툴로는 대표적으로 npm과 yarn이 있습니다.여러분들은 평소 어떠한 패키지 설치 모듈을 사용하나요?

velog.io

 

'Programing Language/Javascript'의 다른글

  • 현재글 npm과 yarn

관련글