[스킬] Vagrant의 공유 폴더에서 "npm install"을 움직이지 않을 때 처리하는 방법

안녕하세요, 저는 스웨덴에서 IT 엔지니어로 일하는 아미타불입니다.
이번에는 Vagrant의 공유 폴더npm install에 움직이지 않는 상황에서 대응법에 대해 설명한다.검증에 사용되는 환경은 다음과 같습니다.

테스트 환경


(2010-10-20 집필 당시)

  • 호스트 OS "macOS Catallina v10.15.7"

  • 고객 OS "bento/ubuntu-18.04(Guest)v2010.140"

  • 소프트웨어
    item
    version
    node
    12.19.0
    npm
    6.14.8
    yarn
    1.22.5
  • 무슨 문제 있어요?


    Vagrant의 공유 폴더npm install에서 를 실행하는 경우 예를 들어 다음 오류가 발생합니다.
    그나저나 내 환경에서는 공유 폴더를 제외한 다른 폴더가 정상적으로 작동할 수 있다.
    $ npm install mongodb
    npm WARN [email protected] No description
    npm WARN [email protected] No repository field.
    
    npm ERR! code ENOENT
    npm ERR! syscall open
    npm ERR! path /home/vagrant/shared-folder/test/node_modules/string_decoder/node_modules/safe-buffer/package.json.1130074357
    npm ERR! errno -2
    npm ERR! enoent ENOENT: no such file or directory, open '/home/vagrant/shared-folder/test/node_modules/string_decoder/node_modules/safe-buffer/package.json.1130074357'
    npm ERR! enoent This is related to npm not being able to find a file.
    npm ERR! enoent
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /home/vagrant/.npm/_logs/2020-10-20T08_54_18_215Z-debug.log
    
    간단하게 말하면 npm install 저장 패키지의 디렉터리node_modules를 찾지 못했을 때.
    그리고 이 문제는 여러 환경에서 보고가 됐는데,github issue를 찾으면 비슷한 증상을 보이는 사람을 발견할 수 있다.
  • NPM Install failing on clean homestead box
  • npm doesn't work in vagrant
  • Vagrant 환경에 따라 지금도 같은 증상이 있습니다.

    솔루션 1: 공유 폴더를 통해 VirtualBox에서 기호 링크 활성화


    아마 이 방법이 가장 통용될 것이다. ->거짓말이야.이 방식은 Windows에만 적용되는 것 같습니다.(Windows에서는 Symlink를 사용할 수 없습니다. 사용하시겠습니까?)
    주변에 Windows가 없어서 잘 모르겠지만 원본yarn만 보면 효과가 있을 것 같은데?
    config.vm.provider :virtualbox do |vb|
      vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/.","1"]
    end
    
    사용자 환경에 따라 Create 아래의 파일 지정을 변경하십시오.
    참조: Windows 호스트의 Vagrant 기호 링크 폴더에서 yarn install 문제 해결 불가능

    해결 방법 2:yarn 사용


    추기(2010-10-21): 이 방법이 가장 간단합니다.
    npm 대신 yarn을 사용하는 경우가 있습니다.하지만 환경에 따라 움직이지 않을 가능성도 있다.(주로 Windows?)
    이 경우 솔루션 1에 링크를 만들거나 "--no-bin-links"옵션을 사용하는 방법이 있습니다.yarn install --link-duplicatesCreate hardlinks to the repeated modules in node_modules.
    https://classic.yarnpkg.com/en/docs/cli/install/#toc-yarn-install-no-bin-links

    솔루션 3: 수동으로 Sim 링크 만들기


    상기npm-issue에서 다음과 같은 회피 전략을 소개했다.
  • 어디든지 가능하므로 새 디렉토리 만들기

  • 실행 디렉토리npm install로 이동
  • 같은 디렉토리에서 (1)로 생성된 폴더의 경우 이름이 node_modules인 Sim 링크를 만듭니다
  • .
  • 동일한 디렉토리에서 실행npm install
  • 명령 예제
  • $ mkdir ~/tmp_node_modules
    $ cd <your-path-to>/npm_project/
    npm_project$ ln -s ~/tmp_node_modules ./node_modules
    npm_project$ npm install mongodb
    
    그런데 이 방법에 문제가 있어요.
    이것은 모든 항목이 npm 라이브러리를 수정할 때 새 디렉터리를 만들고 링크를 만들어야 한다는 것을 가리킨다.
    실제 개발된 문제인 건 알지만 너무 귀찮아서 해결책을 추천합니다.

    솔루션 4: 호스트 OS로 설치


    호스트 OS에서 공유 폴더를 설치하여 이 문제를 해결합니다.설치된 소프트웨어 버전으로 인한 예기치 않은 고장을 피하기 위해 호스트/고객 OS는 가능한 한 버전과 비슷한 버전을 설정해야 한다.
    어떻게든 사용해야 할 때npm 이 방법이 효과가 있어요!

    최후


    어때?총괄적으로 다음과 같은 방법은 Vagrant에서 npm 포장을 관리하는 최선의 조치(집필 시)입니다.
  • 기본적으로解決策1:yarnを使う
  • 어떻게든 사용해야 하는 경우npm解決策4: ホストOSでインストール 병용
  • Vagrant는 여러 사람이 동일한 개발 환경을 통합할 때 매우 강력한 도구입니다.제로부터는 서로 다른 컴퓨터에서 같은 환경을 쉽게 구축할 수 있다.
    다만 가상 환경이라는 말도 있어 호스트 OS에서 일반적인 동작의 물건이 고객 OS에서 이동하지 않는 등 이런 문제도 자주 발생하므로 사용 시 주의해야 한다.
    이번엔 여기까지.그럼 안녕히 계세요!

    좋은 웹페이지 즐겨찾기