brew install nvm
brew info nvm // 명령어에서 안내대로 추가 진행
https://stackoverflow.com/questions/53118850/brew-install-nvm-nvm-command-not-found
// 생성
touch ~/.bash_profile || touch ~/.zshrc
// 작성(brew info nvm 안내대로 진행)
vi ~/.bash_profile || vi ~/.zshrc
// 재실행
source ~/.bash_profile || source ~/.zshrc
Oh my Zsh 설치하면 재 설정 필요
nvm install --lts
nvm install x.x.x
nvm use x.x.x
node -v
// nvm 으로 설치한 node 버전 확인
nvm list
node_modules폴더는 .gitignore에 추가
https://stackoverflow.com/questions/22924633/gitignore-is-not-ignoring-directories
git rm -r --cached node_modules
git commit -m "removing node_modules"
npm config
npm config list
: 현재 설정된 값
npm config set metrics-registry <패키지설치경로> --global
npm config set registry https://your-registry-url
npm install <패키지명> --registry=https://your-registry-url
npm install시 "Maximum call stack size exceeded" 에러가 나는 경우
자바스크립트에서 호출 스택(콜 스택)의 크기가 초과되었음을 의미
원인
package.json
해결 방법
// npm cache 삭제
npm cache clean --force
// npm 재빌드
npm rebuild
// node_modules 폴더 삭제
rm -rf node_modules
// 메모리 사용량을 8GB로 늘린 상태에서 npm install을 실행하여, 메모리 부족으로 인해 발생할 수 있는 설치 실패 문제 방지
// 보통 대규모 프로젝트에서, 기본 메모리 제한(약 1.5GB)이 부족할 때 이 옵션을 사용
// node: Node.js 실행 파일을 호출하는 명령어
// --max-old-space-size=8192: V8 자바스크립트 엔진(구글 크롬과 Node.js의 핵심 부분)의 메모리 사용량을 조정하는 플래그
// which npm 명령은 npm 실행 파일의 경로를 반환, 이 경로를 $(...)로 감싸서, 실제로는 node /path/to/npm과 같이 npm을 Node.js로 실행
// npm install: Node.js 프로젝트의 package.json 파일에 정의된 모든 의존성을 설치하는 명령어
node --max-old-space-size=8192 $(which npm) install
npm install
옵션 조정npm install --legacy-peer-deps
또는 npm install --force
옵션 사용rm -rf node_modules
rm -f package-lock.json | rm -f yarn.lock // lock 파일 삭제
npm cache clean --force
gulpfile.js 파일을 기반으로 실행하는 Task Runner
Task Runner = 반복 가능한 특정 작업들을 단순 자동화한 것
(배포, 테스트와 같은 미리 정의해 놓은 어떤 작업들을 자동화하여 실행)
빌드속도가 빠름, 구축 시간이 적게 걸림
작은 규모의 개인프로젝트에서 사용
entry
의존성의 시작점
Webpack은 모든 파일을 모듈로 관리한다.
Webpack에서 모듈이 많아질수록 서로의 의존성은 높아진다.
output
Webpack을 이용하여 빌드하고 번들된 파일의 위치를 지정
loader
파일을 해석하고 변환하는 과정에 관여하여 모듈 처리
Webpack은 javascript밖에 알지 못하므로 css,scss,babel,file 등은 loader로 등록해줘야 Webpack이 빌드할 때 인식을 할 수 있다.
plugin
해당 결과물의 형태를 바꾸는 역할을 하므로 번들링된 파일을 처리한다.
결과물에서 스타일 코드만 뽑아서 별도 css 파일로 만들어 역할에 따라 파일을 분리하는것이 가능하다.
Node.js의 기본 패키지 관리자
command-line client인 npm과 온라인 데이터베이스인 npm registry로 이루어져 있으며, 일반적으로 command-line client를 npm이라고 생각하는데, 실제로 npm에는 npm registry까지 포함되어 있습니다.
Node.js의 기본 패키지 관리자
장점
: 세계 최대 규모의 패키지들을 보유하고있음
단점
: 저장소의 취약한 보안 이슈
: 여러 패키지 설치 시 이전 패키지 설치가 완료 된 뒤 다음 패키지 설치로 시간이 오래걸림
: 패키지가 많아짐에 따라 빌드 성능이 떨어짐
npm 패키지 매니저의 동작 사용자 지정
페이스북에서 만든 자바스크립트 패키지 관리자
npm과 같은 기능을 수
npm에 단점(속도, 안정성, 보안성)을 느껴 만들어 짐
npm에 단점(속도,안전성,보안성)을 느끼고 페이스북에서 만든 자바스크립트 패키지 매니저
npm과 같은 기능 수행
장점
: 여러 패키지 설치 시 병렬 설치로 속도가 빠름
단점
: yarn.lock 파일의 버전관리로 인해 기존 모듈이 최신화로 업데이트 될 수 있으며 이 경우 하위 호환을 보정하지않는 모듈에서 에러가 날 수 있음
: 디스크 용량을 좀 더 많이 잡아먹는 편
명령어
: https://classic.yarnpkg.com/en/docs/cli/install
패키지 잠금 파일에는 프로젝트의 패키지가 최초로 추가될 때 정확히 어떤 버전이 설치되었었는지 기록된다. 잠금 파일이 생성되면 잠금 파일에 명시된 버전으로 패키지를 설치해주어 설치 시점에 상관없이 항상 동일한 버전의 패키지가 설치되는 것을 보장 받을 수 있다. 잠금 파일을 Git 저장소에 올려두면 프로젝트의 모든 개발자의 PC뿐만 아니라 애플리케이션이 배포되는 서버까지도 npm registry에 배포된 최신 버전을 무시하고 잠금파일에 기록된 버전을 기준으로 패키지가 설치된다.
프로젝트를 최초 셋업하는 개발자는 패키지 잠금 파일을 Git 저장소에 반드시 올려서 다른 개발자들이 패키지 잠금 파일을 기준으로 패키지를 설치할 수 있도록 해야한다.
패키지 잠금 파일은 패키지 매니저가 신규 패키지를 설치하거나 기존 패키지를 갱신/제거할 때마다 package.json과 자동으로 동기를 맞춰주기 때문에 개발자가 이 파일을 직접 수정해야 할 필요는 없으며 해서도 안 된다.
신규 패키지를 설치하거나 기존 패키지를 갱신/제거한 개발자는 package.json과 더불어 함께 업데이트된 패키지 잠금 파일을 반드시 커밋해야 한다.
gitignore 에는 추가하지 말자.
https://blog.naver.com/gingsero/222140320340
https://stackoverflow.com/questions/44206782/do-i-commit-the-package-lock-json-file-created-by-npm-5
npm: https://docs.npmjs.com/files/package-lock.json
yarn: https://yarnpkg.com/lang/en/docs/yarn-lock/