programing

여러 프로젝트가 node_modules 디렉토리를 공유하도록 하려면 어떻게 해야 합니까?

itmemos 2023. 10. 19. 22:02
반응형

여러 프로젝트가 node_modules 디렉토리를 공유하도록 하려면 어떻게 해야 합니까?

프로젝트를 할 때마다 노드 모듈의 모든 의존성을 다운로드해야 합니다.node_modules를 복사하지 않고 여러 프로젝트에서 central node_modules를 공유할 방법이 있습니까?

다음과 같이 나는 매번 많은 명령어를 실행해야 합니다.

npm install gulp-usemin                                                                        
npm install gulp-wrap
npm install gulp-connect
npm install gulp-watch
npm install gulp-minify-css
npm install gulp-uglify
npm install gulp-concat
npm install gulp-less
npm install gulp-rename
npm install gulp-minify-html

프로젝트 간에 node_modules 디렉토리를 공유할 수 있습니다.

노드의 설명서에서:

require()로 전달된 모듈 식별자가 네이티브 모듈이 아니며 '/', '../' 또는 '.'로 시작하지 않는 경우 노드는 현재 모듈의 상위 디렉터리에서 시작하여 /node_modules를 추가하고 해당 위치에서 모듈을 로드하려고 시도합니다.

여기서 찾을 수 없는 경우 파일 시스템의 루트에 도달할 때까지 상위 디렉토리로 이동합니다.

예를 들어 '/home/ry/projects/foo.js'의 파일에서 require('bar.js')를 호출하는 경우 노드는 다음 위치를 다음 순서로 찾습니다.

/home/ry/projects/node_modules/bar.js/home/ry/node_modules/bar.js/home/node_modules/bar.js/node_modules/bar.js/node_modules/bar.js/bar.js

따라서 프로젝트 디렉토리에 node_modules 폴더를 넣고 원하는 모듈을 입력하면 됩니다.그냥 평범한 것처럼 그것들을 요구합니다.노드가 프로젝트 폴더에서 node_modules 디렉토리를 찾지 못하면 자동으로 상위 폴더를 확인합니다.따라서 디렉토리 구조를 다음과 같이 만듭니다.

-myProjects
--node_modules
--myproject1
---sub-project
--myproject2

이와 같이 서브 프로젝트의 종속성조차도 메인 node_modules 저장소에 의존할 수 있습니다.

이렇게 하면 패키지를 만들어야 한다는 단점이 있습니다.json 파일을 수동으로(누군가가 불평 같은 것으로 이것을 자동화하는 방법을 알지 못하는 한).패키지를 설치하고 --save arg를 추가할 때npm install명령어를 사용하면 자동으로 종속성 섹션이나 패키지에 추가됩니다.json, 그게 편리하네요.

npm 대신 pnpm을 시도합니다.

pnpm은 하드 링크와 심볼 링크를 사용하여 디스크에 한 번만 모듈의 한 버전을 저장합니다.

npm을 설치한 경우 다음 기능을 통해 단말기에 설치할 수 있습니다.

npm install -g pnpm

기존 설치(및 하위 디렉토리)를 업데이트하려면 다음을 사용합니다.

pnpm recursive install

또는 단축 명령을 사용합니다(중지).-r하나의 디렉토리만 대상으로 지정해야 하는 경우)

pnpm -r i

한 가지 유용한 참고 사항:일부 희귀 패키지에 해당하는 종속성이 모두 정의되어 있지 않은 경우가 있습니다.그들은 아파트에 의지할지도 모릅니다.node_modulesnpm 또는 실 설치의 파일 디렉토리 구조.종속성 누락 문제가 발생할 경우 다음 명령을 사용하여 모든 하위 종속성을 플랫 파일 구조로 끌어올립니다.

pnpm install --shamefully-hoist

사용하지 않는 것이 가장 좋습니다.--shamefully-hoistpnpm을 사용하는 목적에 어긋나기 때문에 flag를 사용해보세요.pnpm i your-missing-package먼저(pnpm FAQ 참조).

트릭을 찾았습니다. Windows나 Linux의 심볼릭 링크(심볼링크)를 보십시오. 단축키처럼 작동하지만 더욱 강력합니다.

단지 당신은 당신을 위해 A를 만들 필요가 있습니다.node_modules원하는 곳에 폴더를 저장할 수 있습니다.연결은 원래 node_modules 폴더의 바로 가기에 불과합니다.실제 node_modules가 생성되었을 프로젝트 폴더 내에 생성합니다(사용된 경우).npm install.

이를 달성하기 위해서는 최소한 하나가 필요합니다.node_modulesreal folder는 다른 프로젝트에서 Junction을 만듭니다.

Windows에서는 명령 프롬프트를 사용하거나 응용 프로그램을 사용할 수 있습니다.명령 프롬프트를 사용하면 좀 더 많은 제어가 가능하고 응용 프로그램을 사용하는 것이 더 쉽습니다. 저는 Link Shell Extension을 제안합니다.

주 디렉터리는 다음과 같이 표시되어야 합니다.

node_modules
Project 1
Project 2
Project 3
Project 4

파일을 열기만 하면 됩니다.Project 1/.angular-cli.json

스키마를 바꿉니다

"$schema": "./node_modules/@angular/cli/lib/config/schema.json",

로.

"$schema": "./../node_modules/@angular/cli/lib/config/schema.json"

그리고 창조하는 것을 잊지 마세요.node_modules프로젝트 디렉토리 내의 빈 폴더

npm v7.0.0의 워크스페이스 지원도 참조

RFC https://github.com/npm/rfcs/blob/latest/implemented/0026-workspaces.md

문서 https://docs.npmjs.com/cli/v7/using-npm/workspaces

몇몇 기사를 보면 Lerna가 하나의 디렉토리 안에서 여러 프로젝트를 관리하는 데 좋은 도구인 것 같습니다. (monorepo하며 여러 모든 폴더에 패키지 전체를 중복하지 않고 모듈 공유를 지원하며 여러 프로젝트에 설치하도록 명령합니다.

또한 pnpm은 단순하고 효율적인 툴로 이미 다른 프로젝트를 위해 설치된 모듈을 복제하지 않습니다.

단일 node_modules가 있으면 모든 응용 프로그램에 대한 모든 패키지가 포함되어야 한다고 가정합니다.따라서 당신의 앱들은 또한 대부분의 독특한 패키지를 공유할 것입니다.json 항목(이름만 바뀌어야 함)

내 생각은 아래와 같이 단일 루트와 다중 src 레벨을 가지는 것입니다.

root\package.json
root\node_modules
root\\..
root\app1\src\\..
root\app2\src\\..

당신이 직면할 수 있는 유일한 문제는 모든 앱에 대한 json(또는 tsconfig)의 백업과 당신이 작업을 하거나 당신의 시작 스크립트가 모든 앱을 서비스하도록 설정할 때 그것들을 복원하는 것일 것입니다.

언급URL : https://stackoverflow.com/questions/29786887/how-can-i-make-multiple-projects-share-node-modules-directory

반응형