NPM을 통해 Yarn을 사용하는 경우 차이점은 무엇입니까?


101

Yarn 과 NPM 의 차이점은 무엇입니까 ? 이 질문을 작성하는 시점에서 난 단지 같은 NPM 명령의 원사 것과 동일합니다 무엇 인터넷 보여주는 몇 가지 기사를 찾을 수 있습니다 .

기능이 동일합니까 (Yarn이 로컬 캐싱을 수행하고 패키지를 한 번만 다운로드하면되는 것처럼 보임). 이것 외에 NPM에서 Yarn으로 이동하면 어떤 이점이 있습니까?


11
이것은 나쁜 질문이 아니며 반대표를받을 자격이 없습니다. 즉, 진정으로 좋은 질문으로 만들기 위해 약간 구체화 할 필요가 있습니다.
jedd.ahyoung

빠른 Google이 이것을 나타 냅니다. 나는 이것이 아마도 StackOverflow에 대해 너무 광범위하거나 건설적이지 않을 것이라고 생각 하며 어쨌든 더 많은 연구를 보여줄 수 있습니다.
Aurora0001

1
@ Aurora0001 검색했을 때 치트 시트를 보았지만 내 질문에 대한 답이 아닙니다! 두 명령의 차이점이 아닌 차이점을 알고 싶습니다. 제 질문을 먼저 읽어주세요
Asha

4
@Asha 더 구체적으로 질문을 수정하고 이미 조사한 내용을 보여 주어야합니다. 어떤 종류의 차이점을 찾고 있습니까? 라이브러리가 어떻게 구현되는지 알아 보려고하십니까? 문제에 접근하는 데있어서 그들이 어떻게 다른지 알아 내려고하고 있습니까? 질문을 더 정확하게 작성하면 질문하는 내용에 따라 좋을 수 있습니다. (당신이 요구하는지에 따라, 정보는 이미 구글에서 구할 수 있습니다.)
jedd.ahyoung

3
재밌는 사람들이 구글링하라고합니다. 나는 당신의 질문이 Google에 가고 있음을 발견했습니다. 스택 오버플로의 사람들은 마치 더 중요하게 만드는 것처럼 지나치게 배제하는 것처럼 보입니다.
jairhumberto

답변:


68

업데이트 : 2018 년 3 월 (비트 늦게 ...)

버전 5부터 npm

  • package-lock.json얀 (또는 기타) 잠금 메커니즘과 거의 동일한 방식으로 전체 종속성 트리를 수정 하는 '잠금 파일'을 생성합니다 .
  • 도구가 만들어졌습니다.
  • --save 이제 암시됩니다 npm i
  • 더 나은 네트워크 및 캐시 사용

npm 5.7.0은npm ci 에서 찾은 패키지 만 설치하여 지속적 통합 환경에서 종속성을 더 빠르게 설치 하는 명령을 추가로 도입 했습니다 package-lock.json( package-lock.jsonpackage.json동기화되지 않은 경우 오류보고 ).

개인적으로 는 여전히 npm.


실물

나는 혐오는 문서에서 직접 인용,하지만 그들은 할 좋은 설명의 일을 왜, 간결 충분히 내가 더 아이디어를 요약하는 방법을 참조하지 않습니다.

크게:

  1. 당신은 항상 당신이 모든 개발 기계에서 같은 것을 얻고 있다는 것을 알고 있습니다.

  2. npm그렇지 않은 작업을 병렬화합니다.

  3. 네트워크를보다 효율적으로 사용할 수 있습니다.

  4. 다른 시스템 리소스 (예 : RAM)도보다 효율적으로 사용할 수 있습니다.

사람들의 생산 경험은 무엇입니까? 누가 알겠습니까, 일반 대중에게는 유아입니다.

Yehuda Katz의 TL; DR :

처음부터 Yarn 잠금 파일은 동일한 저장소에서 yarn을 반복적으로 실행하여 동일한 패키지를 생성하도록 보장합니다.

둘째, Yarn은 콜드 캐시, 특히 웜 캐시를 사용하여 우수한 성능을 시도합니다.

마지막으로 Yarn은 보안을 핵심 가치로 만듭니다.

멋진 블로그 게시물

Gant Laborde의 " NPM vs Yarn Cheat Sheet "

프로젝트에서 약간 더 긴 버전 :

빠름 : Yarn은 다운로드하는 모든 패키지를 캐시하므로 다시는 필요하지 않습니다. 또한 작업을 병렬화하여 리소스 활용도를 극대화하므로 설치 시간이 그 어느 때보 다 빨라집니다.

신뢰성 : Yarn은 상세하지만 간결한 잠금 파일 형식과 결정 론적 설치 알고리즘을 사용하여 한 시스템에서 작동 한 설치가 다른 시스템에서도 똑같은 방식으로 작동하도록 보장 할 수 있습니다.

보안 성 : Yarn은 코드가 실행되기 전에 설치된 모든 패키지의 무결성을 확인하기 위해 체크섬을 사용합니다.

그리고 README.md에서 :

  • 오프라인 모드 : 이전에 패키지를 설치 한 경우 인터넷 연결없이 다시 설치할 수 있습니다.
  • 결정적 : 설치 순서에 관계없이 모든 시스템에 동일한 종속성이 동일한 방식으로 설치됩니다.
  • 네트워크 성능 : Yarn은 네트워크 활용도를 극대화하기 위해 요청을 효율적으로 대기열에 넣고 요청 폭포를 방지합니다.
  • 다중 레지스트리 : npm 또는 Bower에서 패키지를 설치하고 패키지 워크 플로를 동일하게 유지합니다.
  • 네트워크 탄력성 : 단일 요청이 실패해도 설치가 실패하지 않습니다. 실패시 요청이 재 시도됩니다.
  • 플랫 모드 : 중복 생성을 방지하기 위해 일치하지 않는 종속성 버전을 단일 버전으로 해결합니다.
  • 더 많은 이모티콘. 🐈

yarn이 npm v3와 같은 종속성 해결을 수행하는지 알 수 있습니까 ? 각 종속성의 한 버전 만 설치할 수 --flat있는 실제 평면 구조 를 강제 하는 옵션이 있다는 것을 알고 있지만 이에 대한 기본 동작은 무엇입니까? 감사.
Dimitris Karagiannis 2016

2
더 많은 이모티콘 : 고양이 :
Huei 탄

7
훌륭한 대답입니다. 의 구문을 분기하고 이름을 바꾸고 변경하기 전에 npm에 기여하려고 시도했는지 궁금합니다 install -g.
가드너 Bickford


2

npm :

  1. JavaScript 용 패키지 관리자입니다. npm은 npm 에코 시스템에 대한 명령 줄 인터페이스입니다. 전투 테스트를 거쳐 놀랍도록 유연하며 매일 수십만 명의 JavaScript 개발자가 사용합니다.
  2. NPM은 올바른 잠금 파일을 생성하지만 Yarn 잠금 파일은 경우에 따라 손상 될 수 있으며 yarn-tools로 수정해야합니다.

털실 :

  1. JavaScript를위한 새로운 패키지 관리자. Yarn은 다운로드하는 모든 패키지를 캐시하므로 다시는 필요하지 않습니다. 또한 작업을 병렬화하여 리소스 활용도를 극대화하므로 설치 시간이 그 어느 때보 다 빨라집니다.
  2. Yarn은 암호를 사용한 로그인을 지원하지 않습니다 (NPM이 지원하는 동안).

1
어떤 종류의 로그인?
Rich Stone

2

PNPM이란 무엇입니까?

pnpm하드 링크와 심볼릭 링크를 사용하여 모듈의 한 버전을 디스크에 한 번만 저장합니다. 예를 들어 npm 또는 Yarn을 사용할 때 동일한 버전의 lodash를 사용하는 100 개의 프로젝트가있는 경우 디스크에 100 개의 lodash 복사본이 있습니다. pnpm을 사용하면 lodash가 디스크의 단일 위치에 저장되고 하드 링크가 설치되어야하는 node_modules에 저장됩니다.

결과적으로 디스크에 기가 바이트의 공간이 절약되고 설치 속도가 훨씬 빨라집니다! pnpm이 생성하는 고유 한 node_modules 구조와 Node.js 생태계에서 잘 작동하는 이유에 대한 자세한 내용을 보려면이 작은 기사를 읽으십시오. pnpm을 사용해야하는 이유는 무엇입니까?

PNPM을 설치하는 방법?

npm install -g pnpm

PNPM을 사용하여 npm 패키지를 설치하는 방법은 무엇입니까?

pnpm install -g typescript // or your desired package

PNPMover Yarn및의 이점NPM

다음은 설치 시간이 찍은 보여주는 진행 바이며 NPM, YARNPNPM(짧은 바 낫다) 여기에 이미지 설명 입력

전체 확인 벤치 마크를 보려면 클릭

자세한 내용은 https://www.npmjs.com/package/pnpm을 방문 하십시오.


1

Yarn을 사용하여 패키지를 설치하면 (yarn add packagename 사용) 패키지가 디스크에 배치 됩니다. 다음 설치 중에이 패키지는 레지스트리에서 tarball을 가져 오기 위해 HTTP 요청을 보내는 대신 사용됩니다.

Yarn은 편리한 라이센스 검사기 와 함께 제공되며, 의존하는 모든 모듈의 라이센스를 확인해야하는 경우에 매우 강력해질 수 있습니다.

독점 소프트웨어로 작업하는 경우 어떤 소프트웨어를 사용하는지는 중요하지 않습니다. npm을 사용하면 npm-shrinkwrap.js를 사용할 수 있고 Yarn과 함께 yarn.lock을 사용할 수 있습니다.

자세한 내용은 다음 블로그를 참조하십시오.

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

초보자에게 더 나은 개요를 제공하려고합니다.

npm 은 역사적으로 (2010) JavaScript에서 가장 인기있는 패키지 관리자였습니다. 프로젝트의 종속성을 관리하는 데 사용하려면 다음 명령을 입력하면됩니다.

npm init

그러면 package.json파일 이 생성 됩니다. 여기에는 프로젝트의 모든 종속성이 포함됩니다.

그때

npm install

디렉토리를 만들고 node_modules그 안에 종속성 ( package.json파일에 추가 한)을 다운로드 합니다.

또한 package-lock.json파일을 생성 합니다. 이 파일은 생성 된 종속성 트리를 설명하는 데 사용됩니다. 개발자가 정확히 동일한 종속성을 설치할 수 있습니다. 예를 들어 개발자가 종속성을 v2로 업그레이드 한 다음 v3으로 업그레이드하고 다른 개발자가 v3으로 직접 업그레이드한다고 상상할 수 있습니다.

npm 은 비 결정적인 방식으로 종속성을 설치합니다. 즉, 두 개발자가 다른 node_modules디렉터리를 사용하여 다른 동작을 수행 할 수 있습니다 . ** npm은 2018 년 2 월과 같이 나쁜 평판을 얻었습니다. Linux 시스템에서 sudo npm을 실행하면 시스템 파일의 소유권이 변경되어 운영 체제가 영구적으로 중단되는 문제가 버전 5.7.0에서 발견되었습니다.

이러한 문제와 기타 문제를 해결하기 위해 Facebook은 새로운 패키지 관리자 (2016)를 도입했습니다 . Yarn a 더 빠르고, 더 안전하고, 더 안정적인 JavaScript 용 패키지 관리자입니다.

다음 을 입력하여 프로젝트에 Yarn 을 추가 할 수 있습니다 .

yarn init

package.json파일 이 생성 됩니다. 그런 다음 다음을 사용하여 종속성을 설치하십시오.

yarn install

폴더 node_modules가 생성됩니다. Yarnyarn.lock. 이 파일은와 동일한 목적을 제공 package-lock.json하지만 대신 결정적이고 신뢰할 수있는 알고리즘을 사용하여 구성되어 일관된 빌드로 이어집니다.

npm 으로 프로젝트를 시작한 경우 실제로 Yarn으로 쉽게 마이그레이션 할 수 있습니다. 원 사는 동일한 소비합니다 package.json. 자세한 내용 은 npm에서 마이그레이션 을 참조하십시오.

그러나 npm 은 새로운 릴리스마다 개선되었으며 일부 프로젝트는 여전히 npmyarn 대신 사용합니다 .


1

@msanford의 답변은 거의 모든 것을 다루지 만 보안 (OWASP의 알려진 취약성) 부분이 누락되었습니다.

을 사용하여 yarn audit확인할 수 있지만 수정할 수는 없습니다. 이것은 GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ) 에서 여전히 미해결 문제입니다 .

npm

를 사용할 수 npm audit fix있으므로 일부는 직접 수정할 수 있습니다.

둘 다, 즉 npm audit, yarn audit고유 한 지속적 통합 도구가 있습니다. 이들은 각각 https://github.com/IBM/audit-ci (사용됨, 훌륭하게 작동합니다!) 및 https://yarnpkg.com/package/audit-ci (사용되지 않음)입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.