Go에서 Vendor 폴더를 커밋해야 합니까?



게시물Should You Commit the Vendor Folder in Go?Qvault에 처음 등장했습니다.

"내 Go 프로젝트의 공급업체 종속성을 소스 제어에 커밋해야 합니까?"라는 오래된 질문에 대한 답입니다. "거의 항상"입니다. 참고로 여기Qvault에서는 모든 백엔드 작업에 Go를 사용하며 항상 공급업체 폴더를 커밋합니다. 종속성을 커밋하는 것이 이상적이라는 내 주장의 이유를 살펴보겠습니다.

공급업체 폴더란 무엇입니까?



Node.js 영역에서 온 경우 Golang의 벤더 폴더는 기본적으로 Node의 폴더와 동일합니다node_modules. 모듈이 종속된 모든 코드의 복사본을 저장하는 모듈의 루트에 있는 폴더입니다. 이 코드는 go build 명령이 실행될 때 최종 실행 파일을 컴파일하는 데 사용됩니다. 상상할 수 있듯이 "벤더를 커밋해야 합니까?"토론은 repo 크기의 문제입니다.
node_modules는 큰 크기로 악명이 높습니다.



결과적으로 노드 커뮤니티의 일반적인 통념은 공간을 절약하기 위해 node_modules 파일에 .gitignore를 추가하는 것입니다. 결국, 빠른 npm install (또는 Go의 경우 go get )가 모든 것을 올바르게 잡을 것입니까?

응. 그래 그럴거야. 대부분의 시간.

재현 가능한 빌드


npm Err! 404 'left-pad' is not in the npm registry
위의 오류 코드plagued the developer world는 개발자가 몇 줄의 간단한 코드를 작성하기에는 너무 게으르거나 너무 조잡했기 때문에 유명합니다. 종속성의 복사본이 leftpad에 종속된 모든 프로젝트에 커밋되었다면 패키지가 NPM에서 제거되었을 때 아무 것도 손상되지 않았을 것입니다.

module.exports = leftpad;
function leftpad (str, len, ch) {
  str = String(str);
  var i = -1;
  if (!ch && ch !== 0) ch = ' ';
  len = len - str.length;
  while (++i < len) {
    str = ch + str;
  }
  return str;
}


운 좋게도 지금까지 Go community has been much more rigorous은 종속성을 최소한으로 유지하는 미덕을 유지하는 것에 관한 것입니다. 종속성이 최소로 유지되면 평균vendor 폴더가 요구하는 막대한 데이터 비용을 발생시키지 않고 전체node_modules 폴더를 쉽게 커밋할 수 있습니다.

최종 평결



게시물 개요의 시작 부분에 있는 순서도와 마찬가지로 엄청난 양의 종속성이 없다면 해당 종속성을 커밋하면 됩니다! 프로젝트를 빌드할 때 소스 리포지토리가 삭제되거나 네트워크에 액세스할 수 없는 것에 대해 걱정할 필요가 없습니다. 반면에 외부 코드의 미터법 부하가 있는 경우 지방을 줄이는 작업을 해야 할 수 있습니다.

읽어 주셔서 감사합니다!



테이크computer science courses on our new platform

질문이나 의견이 있으면 Twitter를 팔로우하고 연락하십시오.

Subscribe 더 많은 프로그래밍 기사를 보려면 뉴스레터로

좋은 웹페이지 즐겨찾기