Npm: node package manager
Yarn : yet Another Resource negotiator
Npm: 자바스크립트 런타임 환경 node.js의 기본 패키지 관리자
데이터 무결성 검사를 위해 SHA-512를 사용
아이작 z 슐루터
V1: 설치 패키지들의 보안 취약성, 설치 속도 현저히 느림(계층구조..) 또한 윈도우에서는 경로의 길이가 최대260자라서.. 문제됨
V3: 호이스팅(flat하게 한계층으로 설치)
V5: package.lock파일 생성 -> yarn과 설치 속도 비슷(아직 느림)
V6: 설치한 패키지들의 보얀 취약성을 보완(npm audit등으로 확인)
V7: workspace 개념 도입
최상위 package.json에서 { “workspaces:”: [‘test1’, ‘test2’] } 기입하면 test1, test2 폴더구조로 생성됨.
참고: https://blog.logrocket.com/exploring-workspaces-other-advanced-package-manager-features/
계층 구조 및 flat 구조
Node.js는 require()를 하는 경우 현재의 node_modules에서 먼저 찾고 없으면 부모 디렉터리로 가면서 계속 node_modules를 찾아서 의존성을 처리하기 때문에 우선순위상 자신의 디렉터리 하위에 있는 것을 먼저 사용하게 된다.
V3: 유령 의존성 B
npm dedupe 명령어로 중복 의존성 제거
Package.json나 node_modules 트리가 수정될 경우 자동으로 생성.
Package-lock.json을 사용하여 node_modules 생성(부족한 정보를 도와주는 파일)
보안성 취약한 라이브러리를 설치시 경고해줌.
Yarn v2버전 이후부터 yarn2로 명시(berry라는 코드이름)
yet Another Resource Negotiator ?
V1: yarn.lock 자동생성,
특정 경로에 설치파일 캐시
Npm과 다르게 특별한 선택 알고리즘을 도입하여 의존성 트리가 변형되지 않음.
Checksum방식으로 무결성 보장(중복검사의 한 형태)
Offline Mode : 이전에 설치했었던 패키지 들은 다시 설치할때는 offline에서도 설치가 가능합니다.
Deterministic : 설치 순서에 상관없이 같은 의존성 트리가 생성됩니다.
Network Performance : 네트워크 활용을 극도로 하여 큐를 사용하여 네트워크 요청을 효율적으로 관리합니다.
Network Resilience : 하나의 요청이 실패해도 전체 설치과정이 실패하지 않습니다. 실패 이후에 재요청 됩니다.
Flat Mode : 패키지의 중복 생성을 방지하기 위해 서로 다른 버전의 종속성을 단일 버전으로 해결하였습니다.
Yarn.lock
잠금 파일을 기준으로 설치됨(신규 패키지 설치나 기존 패키지 갱신/제거할때 자동 동기화)
node.js에서는 어떤 모듈을 사용하고자 하면 모듈을 찾기 위해 부모 ~ 루트 까지 node_modules 폴더를 찾는 방식을 사용합니다.
단점 ⇒ 패키지를 찾으려고 Require문을 통한 readdir (I/O 호출이 반복되다보니 런타임에서 느려질 수 있음)
Npm이나 yarn이나 똑같음 ㅎㅎ;
Node.js 창시자인 Ryan Dahl의 node.js의 디자인 설계 실수
유령 의존성 현상 발생
개발 협업간 혼란 야기
용량이 너무 커짐..
태양, 중성자 별, 블랙홀, 그리고.. 노드 모듈
새로운 전략을 들고 나옴
Plug’n Play(PnP) 방식
Workspaces 여러 프로젝트가 동일한 저장소에서 상호작용이 필요할 경우
.yarn/cache 폴더에 의존성의 정보가 저장
.pnp.cjs파일에 의존성을 찾을 수 있는 정보가 기록
Yml파일에 nodeLinker: node-modules 명시해주면 zip 아카이브가 아닌 node_modules 방식으로 관리한다.
Zero-install
Vue 패키지 중에
Npm2.7.5버전은
packageLocation 위치에 있고
packageDependencies에 기입되어있는 의존성들을 참조한다.