git 저장소에 "node_modules" 폴더를 포함해야 하는지 여부
우리 보고서에서 node_modules를 추적해야 하는지 아니면 코드를 체크아웃할 때 npm 설치를 해야 하는지 궁금합니다.
답은 알베르토 자카니가 제안하는 것처럼 쉽지 않습니다.애플리케이션(특히 엔터프라이즈 애플리케이션)을 개발하는 경우 gitrepo에 node_modules를 포함하는 것이 실행 가능한 선택이며 프로젝트에 따라 어떤 대안을 선택할지가 결정됩니다.
그가 node_modules에 대해 매우 잘 주장했기 때문에 저는 그들을 위한 주장에 집중할 것입니다.
엔터프라이즈 앱을 막 마쳤으며 3-5년 동안 지원해야 한다고 상상해 보십시오.당신은 확실히 내일 사라질 수 있고 앱을 더 이상 업데이트할 수 없는 누군가의 npm 모듈에 의존하고 싶지 않습니다.
또는 인터넷에서 액세스할 수 없는 개인 모듈이 있고 인터넷에서 앱을 빌드할 수 없습니다.아니면 어떤 이유에서인지 NPM 서비스의 최종 빌드에 의존하고 싶지 않을 수도 있습니다.
이 Addy Osmani 기사에서 장단점을 찾을 수 있습니다(바워에 관한 것이지만 거의 같은 상황입니다).마지막으로 Bower 홈페이지와 Ady의 기사를 인용하겠습니다.
"다른 사용자가 사용할 수 있는 패키지를 작성하지 않은 경우(예: 웹 앱을 구축하는 경우)에는 항상 설치된 패키지를 소스 제어로 확인해야 합니다."
에 대한 내용은 모듈세정다저다니에 됩니다.packages.json
그것으로 충분합니다.node_modules
.
은 장하던사자를 .node_modules
모듈의 종속성을 잠그기 위한 버전 제어에서, 그러나 더 이상 필요하지 않은 npm 수축 랩을 사용합니다.
@ChrisCM이 논평에서 언급했듯이, 이 점에 대한 또 다른 정당성은 다음과 같습니다.
또한 네이티브 확장을 포함하는 모듈은 아키텍처에서 아키텍처로 작동하지 않으므로 재구성해야 합니다.보고서에 이들을 포함하지 않는 것에 대한 구체적인 정당성을 제공합니다.
팬텀과 같은 패키지 때문에 node_modules 체크인을 하지 않는 것이 좋습니다.예를 들어 JS 및 노드-ass는 현재 시스템에 적합한 이진 파일을 설치합니다.
즉, 하나의 개발자가 실행되면npm install
Linux("node_modules")는 node_modules입니다. Windows에서 복제하는 다른 Dev에서는 작동하지 않습니다.
하고 point npm을 tarball로 하는 것이 npm-shrinkwrap.json
그들에게.수축 팩을 사용하여 이 프로세스를 자동화할 수 있습니다.
이 주제는 꽤 오래된 것 같네요.하지만 npm 생태계의 상황 변화로 인해 여기에 제공된 주장에 대한 업데이트를 놓치고 있습니다.
항상 node_modules를 버전 관리 하에 두지 않는 것이 좋습니다.승인된 답변의 맥락에 나열된 것처럼 그렇게 함으로써 얻을 수 있는 거의 모든 이점은 현재로서는 상당히 구식입니다.
게시된 패키지는 더 이상 npm 레지스트리에서 쉽게 해지할 수 없습니다.따라서 프로젝트가 이전에 의존했던 종속성을 잃는 것을 두려워할 필요가 없습니다.
package-json.lock 파일을 VCS에 저장하면 자주 업데이트되는 종속성으로 인해 동일한 패키지에 의존하더라도 설정이 다를 수 있습니다.json 파일.
따라서 오프라인 빌드 도구가 있는 경우 VCS에 node_modules를 추가하는 것이 유일한 사용 사례로 간주될 수 있습니다.그러나 node_modules는 일반적으로 상당히 빠르게 증가합니다.모든 업데이트는 많은 파일을 변경합니다.그리고 이것은 저장소에 다양한 방식으로 영향을 미치고 있습니다.만약 당신이 정말로 장기적인 영향을 고려한다면 그것 또한 장애가 될 수 있습니다.
svn과 같은 중앙 집중화된 VCS에서는 네트워크를 통해 커밋되고 체크아웃된 파일을 전송해야 하는데, 이는 node_modules 폴더를 체크아웃하거나 업데이트할 때 매우 느립니다.
이렇게 많은 수의 추가 파일은 즉시 저장소를 오염시킵니다.Git는 파일 버전 간의 차이를 추적하는 것이 아니라 단일 문자가 변경되는 즉시 파일 버전의 복사본을 저장합니다.종속성을 업데이트할 때마다 또 다른 큰 변경 사항이 발생합니다.백업 및 원격 동기화에 영향을 미치기 때문에 Git 저장소는 빠르게 커질 것입니다.나중에 git 저장소에서 node_modules를 제거하기로 결정하더라도 과거의 이유로 git 저장소에 포함됩니다.Git 저장소를 일부 원격 서버(예: 백업용)에 배포한 경우 이를 정리하는 것도 힘들고 오류가 발생하기 쉬운 작업입니다.
따라서 효율적인 프로세스가 필요하고 "작은" 것을 유지하고 싶다면 Nexos Repository(또는 ZIP 아카이브가 있는 일부 HTTP 서버)와 같은 별도의 아티팩트 저장소를 사용하여 이전에 가져온 다운로드 종속성 집합을 제공하는 것이 좋습니다.
안 함 적 안node_modules
NodeJS은 C기능을 하기 를 사용하는 .MongoDB NodeJS 드라이버와 같은 JS 모듈은 NodeJS C++ 추가 기능을 사용합니다. 기능은 이한추기실시행컴다니됩파를 할 때 됩니다.npm install
지휘권그래서 당신이 추적할 때node_modules
디렉터리, 실수로 OS별 이진 파일을 커밋할 수 있습니다.
때때로 node_modules 폴더를 확인하는 것이 유용하다는 ivosz에 동의하지만...
시나리오 1:
하나의 시나리오:당신은 npm에서 제거된 패키지를 사용합니다.만약 당신이 node_modules 폴더에 모든 모듈을 가지고 있다면, 그것은 당신에게 문제가 되지 않을 것입니다.패키지에 패키지 이름만 있는 경우.제이슨, 당신은 더 이상 그것을 얻을 수 없습니다.패키지가 24시간 미만이면 npm에서 쉽게 제거할 수 있습니다.24시간 이상 지난 제품이라면 연락을 주셔야 합니다.그러나:
지원팀에 연락하면 해당 버전의 패키지를 제거하면 다른 설치가 중단되지 않는지 확인할 수 있습니다.그렇다면 제거하지 않을 것입니다.
가능성은 낮지만 시나리오 2는...
시나리오 2:
이에 해당하는 또 다른 시나리오:소프트웨어의 엔터프라이즈 버전 또는 매우 중요한 소프트웨어를 개발하고 패키지에 기록합니다.json:
"dependencies": {
"studpid-package": "~1.0.1"
}
은 방을사용니다 합니다.function1(x)
그 소포의.
를 studpid-package로 이름을 .function1(x)
function2(x)
그리고 그들은 잘못을 저지릅니다.을 그은패의버에서변다니경합에서 변경합니다.1.0.1
1.1.0
그건 문제가 됩니다. 왜냐하면 당신이 전화할 때npm install
다음 번에, 당신은 버전을 받아들일 것입니다.1.1.0
타일드를 에."studpid-package": "~1.0.1"
).
하기 르기function1(x)
이제 오류와 문제를 일으킬 수 있습니다.
그러나:
전체 node_modules 폴더(종종 100MB 이상)를 저장소로 푸시하면 메모리 공간이 손실됩니다.몇 kb(패키지).json만 해당)을 수백 MB(패키지)와 비교합니다.json & node_vmdk)...생각해 보세요.
다음과 같은 경우에 할 수 있습니다.
소프트웨어는 매우 중요합니다.
무언가가 실패할 때 돈이 듭니다.
당신은 npm 레지스트리를 신뢰하지 않습니다. npm은 중앙 집중화되어 있고 이론적으로 종료될 수 있습니다.
다음과 같은 경우 99.9%의 경우 node_modules 폴더를 게시할 필요가 없습니다.
당신은 당신 자신만을 위한 소프트웨어를 개발합니다.
당신은 무언가를 프로그래밍했고 다른 누군가가 그것에 관심을 가질 수 있기 때문에 단지 GitHub에 결과를 게시하고 있습니다.
node_modules를 저장소에 저장하지 않으려면 다음을 생성합니다..gitignore
줄을 정리하여 추가합니다.node_modules
.
저는 중간에 대안을 제시하고 싶습니다.
- 추가 안 함
node_modules
기트로 - 사용
package-lock.json
종속성 버전을 확인할 파일입니다. - CI 또는 릴리스 프로세스에서 버전을 릴리스할 때 node_modules 폴더의 복사본을 만들고 이를 백업합니다(예: 클라우드 스토리지).
드물게 NPM(또는 사용하는 다른 레지스트리) 또는 NPM의 특정 패키지에 액세스할 수 없는 경우 node_modules 복사본이 있으며 액세스를 복원할 때까지 작업을 계속할 수 있습니다.
한 가지 더 고려해야 할 것은 체크인입니다.node_modules
사이의 차이를 사용하는 것을 더 어렵게 만듭니다.dependencies
그리고.devDependencies
.
그러나 다른 한편으로는 테스트를 거친 코드와 정확히 동일한 코드를 생산하도록 추진하는 것이 안심이 된다고 말할 수 있습니다.devDependencies
.
package.json에 종속성이 언급된 경우 node_dll을 체크인할 필요가 없습니다.다른 프로그래머는 npm install을 수행하여 쉽게 얻을 수 있으며 npm은 프로젝트의 작업 디렉토리에 있는 node_modules를 만들 수 있을 정도로 충분히 똑똑합니다.
언급URL : https://stackoverflow.com/questions/18128863/should-node-modules-folder-be-included-in-the-git-repository
'programing' 카테고리의 다른 글
공동작업자를 Firebase 앱에 추가하는 방법은 무엇입니까? (0) | 2023.07.06 |
---|---|
오라클 SQL에서 join 키워드와 inner join 키워드의 차이점은 무엇입니까? (0) | 2023.07.06 |
MongoDB(Python)를 사용하여 문서에 새 속성 삽입 (0) | 2023.07.06 |
이클립스용 JavaScript Editor 플러그인 (0) | 2023.07.06 |
다른 테이블스페이스를 사용하여 쿼리에서 테이블 만들기(Oracle SQL) (0) | 2023.07.06 |