Miracle Morning, LHWN

1_0. 이것저것 궁금해서 찾아본 것들 정리 본문

IT 기술/[React] Project

1_0. 이것저것 궁금해서 찾아본 것들 정리

Lee Hye Won 2021. 6. 1. 13:52
npm과 yarn의 차이점

 

# npm : Node Package Manager라는 프로그램으로, 자바스크립트 라이브러리를 설치하고, 버전을 관리한다.

npm은 node_modules라는 폴더에 라이브러리를 내려받아 저장하고,

package.json이라는 파일에 설치된 라이브러리의 정보를 적어서 저장한다.

(라이브러리 명세를 적는 이유는 라이브러리의 용량이 크기 때문에 명세를 통해서 다운받을 수 있도록 하기 위함)

# yarn : npm의 동작방식과 유사하고, 페이스북에서 npm의 단점을 보완하여 성능과 속도를 개선한 라이브러리 관리도구이다.

→ 즉, npm은 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용했는데, 이 특징은 편리하지만 안정성의 위험도가 증가한다.

반면 yarn 은 yarn.lock 이나 package.json 으로부터 설치만! 한다. (yarn.lock 은 모든 디바이스에 같은 패키지를 설치하는 것을 보장하여

다른 버전을 설치함으로써 발생하는 버그를 줄였다.)

 

package-lock.json 파일의 정체

 

# package-lock.json 파일은 npm을 사용해서 node_modules 나 package.json 파일을 수정하게 되면 자동으로 생성되는 파일이다.

이 파일은 파일이 생성되는 시점의 의존성 트리에 대한 정확한 정보를 가지고 있다. (npm install을 하면 태어난다.)

package.json 파일의 의존성 선언에는 version range가 사용되는데, version range는 특정 버전이 아니라 버전의 범위를 의미한다.

(가령, npm install express를 하면 package.json 파일에는 “^4.16.3”(Caret Ranges)로 버전 범위가 추가된다.

이 package.json 파일로 npm install 을 실행하면 현재는 4.16.3 버전이 설치되지만,

express의 새로운 minor, patch가 publish되면 동일한 package.json 파일로 npm install 을 실행해도 4.17.3, 4.16.4 와 같은

업데이트된 버전이 설치된다.)

package.json을 이용해서 node_modules가 생성되는 것이 아니라, package-lock.json을 통해 node_modules를 생성함으로써

한 프로젝트의 여러 개발자들이 동일한 node_modules 트리를 생성해서 같은 의존성을 설치할 수 있도록 보장해준다.

즉, package-lock.json 파일은 npm에 의해서 프로젝트의 node_modules나 package.json 이 수정되는 경우 생성되거나 업데이트되며,

당시 의존성에 대한 정보를 모두 가지고 있다. (따라서 이 파일도 소스 저장소에 commit 해주어야 한다.)

 


1. package-lock.json 파일은 의존성 트리에 대한 정보를 모두 가지고 있다.
2. package-lock.json 파일은 저장소에 꼭 같이 commit 해야한다.
3. package-lock.json 파일은 node_modules 없이 배포하는 경우 반드시 필요하다.

 

npm install 할 때 보이는 --save 옵션은 무엇일까

 

그냥 npm install ~ 을 하면 ./node_modules 디렉터리에 패키지 설치를 하고 끝이지만,

--save 나 --save-dev 옵션을 추가해주면 ./package.json 까지 업데이트해준다.

이때 --save 와 --save-dev 은 '어디에 패키지 정보를 추가해주느냐'에 따라 또 나뉘는데,

--save 옵션은 dependencies object 에 추가해주고, --save-dev 옵션은 devDependencies object 에 추가해준다.

dependencies와 devDependencies 의 차이는 npm install 할 때 차이가 나타나는데

dependences 는 항상 설치되지만, devDependencies 는 npm install 에 --production 옵션을 붙이면 devDependencies 에는 설치되지 않는다. npm install 에 --dev 옵션을 붙여주어야 devDependencies 에 설치된다.

 

 

 

Comments