프로젝트를 진행하다 보면 종종 인터넷이 안되는 환경에서 작업해야하는 경우가 있다.
npm은 온라인에서 패키지를 받아오는데, 인터넷이 안되는 환경에서는 패키지 다운로드를 할 수 없다.
그렇다고 node_modules 폴더 자체를 가져가기에는 정말 어마어마하게 크다...
따라서 이런 경우에는 어떻게 진행했었는지 정리해놓고자 한다.
다른 방식이 있을수도 있으나.. 그냥 내가 했던 방식이다..
환경
내부망pc(인터넷 안되는 pc) 1대, 외부망pc 1대
결론
yarn으로 패키지 설치 -> 패키지들을 tar.gz으로 묶기 -> 이 tar.gz들을 오프라인 환경으로 가져가서 yarn install 하기
npmbox 라는 패키지를 사용해서도 가능하지만, 나는 패키지를 사용하지않고 yarn으로 했었다.
먼저 인터넷 되는 환경에서 작업하기
Step 1. yarn 으로 패키지 설치
npm으로 설치해서 사용했던 패키지들을 모두 yarn 으로 다시 설치한다.
(node_modules를 다 지우고 yarn으로 재설치했다)
$ npm install yarn
$ yarn add express
$ yarn add body-parser
....
서비스가 잘 돌아가는지 확인한다.
Step 2. 프로젝트 홈 경로에 .yarnrc 파일 생성
프로젝트 홈 경로(node_modules 와 같은 위치)에 .yarnrc 파일을 생성하고 파일에 아래 코드를 넣는다.
yarn-offline-mirror "./npm_packages"
yarn-offline-mirror-pruning true
yarn-offline-mirror : 압축된 .tgz 파일들이 들어갈 폴더
yarn-offline-mirror-pruning : 업데이트 된 패키지 추가 시 yarn cache를 먼저 확인하고 여기에 없는 dependency를 가져옴
Step 3. node_modules와 yarn.lock 파일 삭제
Step 4. 캐시 삭제
$ yarn cache clean
Step 5. 패키지 받아오기
$ yarn install
이렇게 했을때 아까 위에서 지정한 /npm_packages 폴더가 생성되면서 거기에 *.tgz파일들이 저장되고 yarn.lock 파일도 새로 생성이 되면 성공이다.
Step 6. 필요한 파일 담기
이제 오프라인 환경에 가져갈 파일들을 usb에 담자.
node_modules 를 제외하고,
npm_packages, 작성한 js 파일들, .yarnrc, yarn.lock 파일, package.json 을 가져가면 된다.
혹시 내부망에 node.js와 yarn이 설치되어있지 않다면 그것도 설치파일을 가져가서 따로 설치해야 한다.
node.js와 yarn 설치는 별도의 게시글로 설명한다.
https://songdev.tistory.com/80
내부망에서 작업하기
Step 1. 사전작업
usb로 가져온 파일들을 원하는 위치에 옮기고, node.js, yarn 을 설치한다.
Step 2. 패키지 내려받기
홈 경로로 이동한 뒤에 아래 명령어를 터미널에 입력하여 패키지들을 다운받는다.
(나는 vscode 내 터미널에서 작업했다)
$ yarn install --offline
만약 패키지가 추가되면
만약 사용해야하는 패키지가 추가되면
1. 외부망pc에서 node_modules, npm_packages, yarn.lock 파일 삭제하고
$ yarn install
패키지를 yarn install 로 다시 패킹한 다음에 새로 만든 파일들을 다시 usb에 담아서
2. 내부망pc에서 node_modules 삭제하고
$ yarn install --offline
다시 설치해서 사용한다.
참고 사이트
https://musma.github.io/2019/08/23/nodejs-offline-deployment.html
https://classic.yarnpkg.com/blog/2016/11/24/offline-mirror/
'Web 개발' 카테고리의 다른 글
Spring 프로젝트 내 jsp에서 node.js 서버 호출하기 (0) | 2023.02.23 |
---|---|
오프라인 환경(폐쇄망)에 node랑 yarn 설치하기 (4) | 2022.12.09 |
node.js 파일 업로드 모듈 정리(multer, connect-busboy) (중간저장 없이 업로드) (0) | 2022.12.09 |
크롬에서 캐시 비우기 및 강력 새로고침 (2) | 2022.12.08 |
이중화 되어있는 웹서버로 ajax 호출하기 (0) | 2022.12.08 |