Node.js npm, yarn, package.json
npm : node package manager, registry, npm CLI
npm install --save-dev : 개발하는 환경에서만 필요한 의존성
package.json에서 dependencies는 실제 실행 환경, devDependencies는 개발 환경에서 필요한 의존성들
package.json : 대략적인 package의 버전을 정의 (다른 패키지의 버전이 업데이트 되더라도 따라가기 위해, 추적을 위함)
실제 설치되는 버전과 정확히 일치하지는 않을 수 있음을 유의
package-lock.json : package의 실제 설치된 버전을 정의 (협업 시에나 환경이 달라지는 경우 매우 중요)
설치되는 package들은 node_modules 아래에 설치되게 됨
node_modules아래의 설치된 package의 index.js에서 export하여 src에서 사용할 수 있도록 해줌
ex) require('decamelize') === require('decamelize/index)와 같은 역할을 함
Semantic Versioning
MAJOR version : imcompatible API changes
MINOR version : backward compatible 같은 라이브러리를 버전을 올려서 쓰더라도 동작에는 영향X (ex) 새로운 기능 추가
PATCH version : backward compatible 이나 bug fix등
ex) 버전 제한자의 사용 patch를 따라가고 싶은 경우 ~, minor는 ^, major는 *or x사용
-> npm update package_name : 제한자를 따라가는 가장 최신의 버전으로 패키지를 설치
yarn : ultra fast -> caching을 사용하여 빠른 속도로 패키지 관리 (npm처럼 패키지 관리)
yarn.lock파일으로 package-lock과 같은 기능을 수행
script를 정의하고 실행시에 run을 사용하지 않더라도 yarn lint등과 같이 사용가능
package.json의 filed
eslint를 CI에서 사용한다면 가장 최적으로 사용하는 방법 (continuous integration)
여러 사람의 editor설정이 중구난방 및 개발 환경이 다 다를 수 있으므로 통합하기 위해서는,
같은 환경에서 같은 테스트, 배포과정을 돌리도록 하는 것이 CI (개발 자동화의 기초적인 부분)
scripts : user정의 script를 넣을 수 있는 필드, 프로젝트 관리용으로 주로 사용
npm run을 통해서 실행 가능 ex) npm run lint
engines : 동작 가능한 node의 버전을 명시
repositery : 소스 코드가 관리되는 저장소 위치를 지정 ex) github의 경우 npm docs명령어로 찾을 수 있음
main : 프로그램의 시작점이 되는 모듈의 ID, require(패키지이름)을 했을때 패키지 이름에 해당하는 모듈의 exports객체가 반환
files : 프로젝트에 포함도니 파일의 배열, 폴더 이름으로 지정 시 폴더 안의 파일도 포함
.npmignore에 지정된 파일들은 files에 포함되어 있다고 하더라도 대사에서 제외
author, contributors : author는 한 사람, contributors는 여러사람 -> 필수적으로 name필드, email과 url은 선택적
keywords : 키워드를 문자열 배열로 섦여, npm search로 검색된 리스트에 표시되므로 만든 패키지를 찾고 이 해하는데 도움
name : 패키지 이름, version : 패키지 버전, description : 패키지 설명, license : 패키지에 포함된 라이센스