[메모] 오프라인(내부망)에서 npm install을 해보자.
by 배부른코딩로그💡Offline 환경에서도 npm install 과 흡사하게 필요한 패키지를 다운로드 해보자. 귀찮음 주의!!
목표
- 오프라인 상황에서도 불굴의 의지로 필요한 패키지를 다운받을 수 있다.
- 조금이라도 더 편리한 방법을 기록해두자.
B2C 가 아닌 B2B 혹은 B2G 서비스를 운영하는 회사는 대부분 보안이 철저하다.
인터넷 연결이 가능한 외부망과 개발 관련 서버만 접속 가능한 내부망으로 나뉠 것이다.
npm 프로젝트가 존재하고 npm을 통해 필요한 패키지를 다운로드 받고자 하면 어떻게 해야할까?
보통 외부망에서 내부망으로 파일을 전송할 수 있는 통로를 하나 열어두긴 한다.
하지만... 상급자의 결제를 항상 받아야하기 때문에 상급자가 휴가이거나 자리를 비운다면 무한히 기다려야 한다.
이게 너무 번거롭고 귀찮았다.
그래서 찾아본 결과, yarn을 통하여 오프라인 상태에서 yarn install을 할 수 있다는 것을 찾게 되었다.
yarn의 경우 패키지 레퍼지토리 서버에서 필요한 패키지를 가져올 때, node_modules에 들어있는 디렉토리로 바로 가져오는 것이 아니라, *.tgz 파일로 다운로드하고, 패키지 매니저가 다운로드된 파일의 압출을 풀어 node_modules에 추가하는 방식이다.
즉, 로컬 디렉토리에 *.tgz가 있다면 다음 명령어를 통해 특정 프로젝트로 패키지를 넣을 수 있다는 것이다.
yarn install --offline
단, yarn이 외부망, 내부망 모두 설치 되어져 있어야 한다!!!
yarn offline mirror 방식
외부망 쪽 작업 순서
1) yarn 설치
npm i yarn
yarn --version
2) 프로젝트 루트 경로에서 .yarnrc 파일 생성
cat > .yarnrc
yarn-offline-mirror "./npm_packages"
yarn-offline-mirror-pruning true
3) node_modules, yarn.lock 삭제
rm -rf ./node_modules
rm ./yarn.lock
4) yarn cache 삭제 후 의존성 설치
yarn cache clean
yarn install
5) node_modules만 삭제 후 저장소 형상관리 업로드
rm -rf ./node_modules
git add .
git commit -m "새로운 의존성 다운로드"
git push origin
그러면, ./npm_packages 디렉터리에 **.tgz* 파일들이 저장되고 yarn.lock 파일이 새로 생성된다.
위 디렉터리와 파일을 프로젝트 저장소로 올려버리자!
내부망 쪽 작업 순서
1) 저장소로부터 최신본 내려받기
git fetch origin
git pull origin
2) 프로젝트의 ./node_modules/ 삭제
rm -rf ./node_modules
3) .yarnrc, yarn.lock, package.json 확인 후, 프로젝트 루트 경로에 복붙
- .yarnrc: npm_packages 경로 설정 확인.
- yarn.lock: 그대로 프로젝트 경로에 복붙.
- package.json: 혹시나, 버전을 업그레이드하거나 추가한 경우, "dependencies", "devDependencies" 복붙
필자의 경우, 프로젝트 경로와 다른 곳에 npm_packages를 구성했다.
.yarnrc 에 npm_packages를 절대경로로 수정했음을 찾고 바란다.
추가적으로 대부분 다른 사람들은 yarn.lock을 날려버리는데, 필자는 형상관리에 넣어줬다.
이게 없으면, 버전을 못 찾아서 인스톨 오류가 났기 때문이다.
즉, 새롭게 패키지가 추가되면 yarn.lock만 잘 복붙하면 된다 : )
마무리
필자가 한 방식으로 진행하려면, SVN 혹은 Git 과 같은 형상관리에 대한 접근이 외부망에서 가능해야 한다.
SVN은 막혀있지만 Git은 접근이 되어버리는 기적의 보안 덕분에 위 방식으로 진행할 수 있었다.
다만, 많은 기대를 가지고 진행했지만, 이 또한 상당히 귀찮음은 존재한다.
`npm install <패키지>` 한 번에 하던 것을 지금 몇 개의 명령어를 날린 것인지..........
*.tgz를 형상관리하면서 팀원들에게 공유하고 동일한 방식으로 사용할 수 있다는 점이 아닐까 싶다.
파일이 크면 분할압축해서 망분리로 넘기곤 했는데, 그 때보다는 훨씬 나아졌다고 볼 수 있다.
출처
- 오프라인 환경에 NodeJS 애플리케이션 배포하기, 이현수, 2019-08-23
- Running Yarn offline, Konstantin Raev, 2016-11-24
Last Updated. 2022. 07. 07.
'자바스크립트 > 메모장' 카테고리의 다른 글
[JavaScript] 웹 개발자로서 코드 품질 개선을 위한 구문들 (0) | 2023.01.18 |
---|---|
[JavaScript] Console API (0) | 2023.01.13 |
[JavaScript] Syntactic Sugar (0) | 2022.07.08 |
블로그의 정보
배부른코딩로그
배부른코딩로그