인터넷이 연결되는 환경에서 프로젝트를 생성하고 패키지를 다운로드해서 옮기는 방식입니다.
폐쇄망에는 넥서스3을 설치해서 이용합니다.
(인터넷 연결되는 환경)
1. yarn 설치
npm i -g yarn
2. 필요한 패키지가 담긴 프로젝트 생성 ( react -app )
yarn create react-app ods-sample
cd ods-sample
yarn add axios react-modal react-router-dom styled-components
3. .yarnrc 파일 만들고 아래 내용 넣기
yarn-offline-mirror "./npm_packages"
yarn-offline-mirror-pruning true
4. node_modules 폴더 , yarn.lock 삭제
5. 캐시 삭제
yarn cache clean
6. 패키지 다시 받아오기
yarn install
7. npm_packages 압축해서 폐쇄망에 옮기기
(폐쇄망)
8. npm_packages 압축해제 후, 아래 스크립트를 이용해서 넥서스 등록
## publish 스크립트
vi publish.sh
---
#!/bin/bash
REPOSITORY=http://{ Nexus 주소 }:{ Nexus 포트(필요시) }/repository/{ repo 이름 }/
PACKAGES_PATH=./npm_packages
for package in $PACKAGES_PATH/*.tgz; do
npm publish --registry=$REPOSITORY $package
done
---
## Nexus 로그인
npm login --registry http://{ Nexus 주소 }:{ Nexus 포트(필요시) }
## 스크립트 실행
chmod +x publish.sh
./publish.sh
9. 폐쇄망 리포지터리를 보도록 설정
npm config set registry https://리포지터리주소
10. 프로젝트의 package.json 파일을 이용해서 yarn install 실행
!!참고
폐쇄망에서 nodejs 설치시에는 환경들을 모두 제어하기 위해서 바이너리 파일을 받아서 압축해제 한후,
환경변수를 설정해서 사용하는게 좋습니다.
1. nodejs 바이너리파일 다운로드
Node.js — Download Node.js® (nodejs.org)
2. 압축해제
샘플) C:\study\node-workspace\bin\node-v20.12.2-win-x64 에 압축해제함
3. 필요폴더 (글로벌폴더 ) 생성
C:\study\node-workspace\bin\node-v20.12.2-win-x64\npm-global
C:\study\node-workspace\bin\node-v20.12.2-win-x64\npm-global-cache
4. 환경설정(글로벌)
npm config --global set prefix "C:\study\node-workspace\bin\node-v20.12.2-win-x64\npm-global"
npm config --global set cache "C:\study\node-workspace\bin\node-v20.12.2-win-x64\npm-global-cache"
5. PATH 설정
C:\study\node-workspace\bin\node-v20.12.2-win-x64
C:\study\node-workspace\bin\node-v20.12.2-win-x64\npm-global
C:\study\node-workspace\bin\node-v20.12.2-win-x64\npm-global\bin
3개 추
이제 npm i -g 같이 글로벌 설정하여 설치하는 프로그램들은 4의 환경에 설치가 되니 폐쇄망으로 환경을 옮길때 통으로 옮겨서 사용하도록 합니다.
참고 링크들
오프라인 환경(폐쇄망)에서 npm 패키지 install 하기(yarn offline) — songdev (tistory.com)
[Nexus] 폐쇄망에서 Nexus 운영하기(feat. npm build) (velog.io)
설치된 라이브러리가 많은 프로젝트의 npm registry 변경하기 with package-lock.json 이해 | 아웃풋 트레이닝 (baek.dev)