package.json
private
{
"private": "true",
...
}
npm publish 하는 경우 명령어가 실행되지 않도록 강제하는 설정
npm publish 는 NPM Registry에 프로젝트를 업로드하는 것을 의미
Next.js 를 create-next-app 으로 설치하는 경우 package.json에 생성됨
Semantic versioning
{
"name": "my-app",
"version": "0.1.0",
...
}
major/minor/patch 형식의 버전 표기법
major: 프로젝트에 엄청난 변화가 있을 경우에만 변경
minor: 리팩토링, 기존의 코드로 새로운 기능 구현이 있을때 변경
patch: 버그를 수정했을때만 변경
{
"next":"^5.1.0",
...
}
^ 캐럿은 minor 버전을 최신화 하겠다는 의미
5.10.0 다음에 6.1.0 으로 버전이 업데이트된 프로젝트가 있다.
npm install을 하는 경우 ^5.1.0 에 ^ 캐럿 문자가 있으므로 major버전은 유지한채 해당 major의 최신 버전인 5.10.0 버전이 설치 된다.
devDependencies
{
"devDependencies": {
"prisma": "^5.9.0",
...
}
}
- 개발 버전에만 사용하는 패키지들의 모임
- 프로젝트를 빌드하는 경우에는 개발이 아니라 실제 실행에 필요한 패키지만 있으면 되기 때문에
devDependencies에 등록된 패키지들은 빌드 버전에 포함되지 않는다
scope
- npm registry에서 계정을 생성했을때 소유하게되는 저장소 같은 개념
@scope/package-name 형식
npm i @prisma/client
- 위의 경우
prisma가 scope.
- prisma 개발팀이
npm registry에 생성한 계정에 prisma라는 scope을 가지고 있다는 의미
client 패키지가 prisma안에 저장되어 있는 개념
version
@ 기호가 @prisma/client 처럼 첫글자에 위치한게 아닌 경우는 package@version 을 의미
- 아래 명령어는
next 패키지의 beta 버전을 설치하겠다는 의미
npm i next@beta
- 아래 처럼
scope가 다른 경우 패키지 이름이 같을 수 있다.
- 사람마다 자기 계정의
scope를 가지고 있고 그 안에 패키지를 저장하는 개념이기 때문에 가능
npm i next@beta
npm i @auth/next@beta
npm ci
{
"next":"^5.1.0",
...
}
npm install 하면 minor가 최신인 버전으로 next 설치
- 설치된 버전이
5.5.0인 경우 package.lock.json 에는 5.5.0 으로 고정 버전이 설정됨
- 예를 들어, 1년이 지나서 이 프로젝트를 다시
npm install 하는 경우 해당 시점에서 가장 minor가 최신인 버전으로 설치됨
- 1년이 지나서 받은
5.10.0 버전이 가장 최신이라고 가정
- 여기서 문제는 프로젝트는
5.5.0버전일때 개발되었기 때문에 5.10.0버전으로 실행하는 경우 버그나 에러가 발생할 수 있음
- 이를 방지하려면 정확히 개발 당시의 버전으로 설치해야함
package.lock.json에 등록된 버전이 개발 당시의 5.5.0 고정 버전이기 때문에 npm ci 명령어를 실행하면 package.lock.json에 있는 고정 버전으로 설치
npm install 명령어를 사용했을 때, devDependencies에 있는 패키지들도 설치된 경우.
NODE_ENV 환경 변수의 값이 undefined 이거나 development일 가능성이 있다.
이 경우 export NODE_ENV=production 을 입력해주면 노드의 기본 모드가 production모드가 되어있기 때문에 npm install을 했을때 devDependencies가 설치되지 않는다.