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
가 설치되지 않는다.