플랫 node_modules만이 유일한 방법은 아닙니다.
pnpm의 새로운 사용자는 pnpm이 만드는
node_modules
의 이상한 구조에 대해 자주 묻습니다. 왜 평평하지 않습니까? 모든 하위 종속성은 어디에 있습니까?I am going to assume that readers of the article are already familiar with flat
node_modules
created by npm and Yarn. If you don't understand why npm 3 had to start using flatnode_modules
in v3, you can find some prehistory in Why should we use pnpm?.
그렇다면 pnpm
node_modules
이 특이한 이유는 무엇입니까? 두 개의 디렉토리를 만들고 그 중 하나에서 npm install express
를 실행하고 다른 하나에서 pnpm install express
를 실행해 봅시다. 다음은 첫 번째 디렉토리node_modules
에서 얻을 수 있는 것의 상단입니다.전체 디렉토리here를 볼 수 있습니다.
그리고 이것이 pnpm에 의해 생성된
node_modules
에서 얻는 것입니다.확인할 수 있습니다here.
그렇다면 모든 종속성은 어디에 있습니까?
node_modules
라는 .registry.npmjs.org
폴더와 express
라는 심볼릭 링크가 하나뿐입니다. 글쎄, 우리는 express
만 설치했으므로 애플리케이션이 액세스해야 하는 유일한 패키지입니다.Read more about why pnpm's strictness is a good thing here
안에 무엇이 있는지 봅시다
express
.express
에는 node_modules
가 없습니까? express
의 모든 종속성은 어디에 있습니까?요령은
express
가 단지 심볼릭 링크라는 것입니다. Node.js는 종속성을 해결할 때 실제 위치를 사용하므로 심볼릭 링크를 유지하지 않습니다. 그러나 express
의 실제 위치는 어디입니까?여기: node_modules/.registry.npmjs.org/express/4.16.3/node_modules/express .
자, 이제
.registry.npmjs.org/
폴더의 용도를 알았습니다. .registry.npmjs.org/
는 모든 패키지를 플랫 폴더 구조에 저장하므로 다음 패턴으로 이름이 지정된 폴더에서 모든 패키지를 찾을 수 있습니다..registry.npmjs.org/<name>/<version>/node_modules/<name>
이 플랫 구조는 npm v2에서 생성된 중첩
node_modules
으로 인해 발생한 긴 경로 문제를 방지하지만 npm v3,4,5,6에서 생성된 플랫node_modules
과 달리 패키지를 격리된 상태로 유지합니다.이제
express
의 실제 위치를 살펴보겠습니다.사기인가요? 아직 부족하다
node_modules
! pnpmnode_modules
구조의 두 번째 트릭은 패키지의 종속성이 종속 패키지의 실제 위치와 동일한 디렉토리 수준에 있다는 것입니다. 따라서 express
의 종속성은 /express/4.16.4/node_modules/express/node_modules/
가 아니라 /express/4.16.4/node_modules/에 있습니다.express
의 모든 종속성은 node_modules/.registry.npmjs.org/
의 적절한 디렉토리에 대한 심볼릭 링크입니다. express
의 종속성을 한 수준 위로 배치하면 순환 심볼릭 링크를 피할 수 있습니다.보시다시피 pnpm
node_modules
구조가 처음에는 이상해 보이지만구조는 피어 종속성이 있는 패키지의 경우 약간more complex이지만 아이디어는 동일합니다. 심볼릭 링크를 사용하여 플랫 디렉터리 구조로 중첩을 생성합니다.
pnpm 을 사용해 보고 싶다면 npm:
npm i -g pnpm
를 사용하여 쉽게 설치할 수 있습니다. 그런 다음 무언가를 설치해야 할 때 npm 대신 실행하십시오: pnpm install foo bar
.
Reference
이 문제에 관하여(플랫 node_modules만이 유일한 방법은 아닙니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zkochan/flat-nodemodules-is-not-the-only-way-mo2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)