이동 도구: direnv

3274 단어 goproductivity
그러나 direnv은 분명히 Go 도구이며, 문맥상 Go로 작성되었지만 이전 게시물에서 다루었던 것과 같은 개발 도구는 아닙니다(예: versions , ifacecodegen , counterfeiter 또는 10615067 중 하나). 프로그램을 개발할 때 사용을 고려해야 하는 도구(Go뿐만 아니라 실제로 모든 프로그래밍 언어로), 특히 환경 변수를 통해 구성할 수 있는 다른 이진 종속성 또는 기타 종속성을 가진 프로그램을 빌드하는 경우.

개조하다 디렌브가 뭔가요?



공식 페이지에 따르면:

direnv is an extension for your shell. It augments existing shells with a new feature that can load and unload environment variables depending on the current directory.



(강조 내)

이 설명의 핵심은 터미널과 상호 작용할 때 현재 위치에 따라 환경 변수를 로드/언로드하는 강력한 기능입니다.

direnv를 사용하는 것이 왜 관련이 있습니까?



다음과 같은 가상 시나리오를 고려하십시오. 일부 코드를 생성하기 위해 도구에 의존하는 무언가를 빌드하고 있습니다. 이를 tool (v1)이라고 합시다. 잠시 후 새 프로젝트에서 작업을 시작하면 이 새 프로젝트는 동일한 도구를 사용하지만 다른 버전을 사용합니다. tool (v2)이지만 v1과 비교하면 다른 방식으로 코드를 생성합니다. v1을 설치하면 두 도구가 호환되지 않는 아티팩트를 생성하기 때문에 v2과 충돌합니다(반대로 동일하게 적용됨).

Go 컨텍스트에서 이러한 종속성을 처리하는 것은 을 사용하여 쉽게 관리되지만 실제 런타임 요구 사항은 어떻습니까? 그게 무슨 말이에요? tool (v1) 에 의존한다면 PATH 에서 tool (v2) 과 같은 이야기를 설치하고 사용할 수 있어야 합니다.

이 갈등을 어떻게 처리할 수 있습니까? 더 중요한 것은 이러한 도구를 샌드박스 처리하는 방법은 무엇입니까?

모듈 이동 디렌브를 소개합니다



이것은 direnv이 실제로 빛나는 곳입니다. 환경 변수를 구성 옵션으로 사용하는 일이 발생하는 것을 샌드박스할 수 있습니다. 이것의 가장 일반적인 예는 구체적인 PATH 변수를 만드는 것입니다. 폴더 안에 설치된 바이너리가 사용됩니다. 이 구성을 사용하면 direnv이 우리가 있는 폴더에만 적용할 수 있는 경계를 명확하게 정의할 수 있습니다.

공식 에는 설치 및 사용을 위한 특정 단계가 포함되어 있으며 다음과 같이 작동합니다.
  • 현재 디렉토리 및 기타 하위 디렉토리에 구성을 적용하려는 모든 위치에 새 .envrc 파일을 생성하고
  • 적용하려는 지시문을 정의하도록 .envrc을 구성하십시오.

  • 예를 들어, 위에서 가정한 시나리오를 사용하여 project1(tool (v1) 사용)에서 작업할 때 상위 디렉토리에서 .envrc을 다음과 같이 정의할 수 있습니다.

    PATH_add bin
    export GOBIN=$PWD/bin
    


    이것은 direnv을 나타냅니다.
  • 현재 작업 디렉토리에서 PATH을 가리키도록 bin/을 업데이트하고
  • 을 업데이트하려면
  • 또한 해당 경로를 가리키도록 GOBIN을 내보냅니다.

  • 아이디어는 우리가 go install tool (v1)일 때 bin/ 아래에 설치되고 우리가 그것을 실행하려고 할 때 같은 경로에서 사용할 수 있다는 것입니다.
    .envrc(project2 사용)에 대해 유사한 tool (v2)을 생성하면 결과가 비슷할 것입니다. 실제로 이것이 의미하는 바는 이제 두 프로젝트가 서로 충돌하지 않고 동일한 도구의 다른 버전을 참조할 수 있다는 것입니다. 강력한 기능입니다.

    Github 저장소 마지막 생각들


    direnv을 충분히 추천할 수 없습니다. 개발 경험을 향상시켜야 하는 간단하면서도 강력한 도구입니다.

    시도해보십시오. 실망하지 않을 것입니다.

    좋은 웹페이지 즐겨찾기