[Next] 3일차 package.json

nearworld·2024년 2월 6일
0

NextJS

목록 보기
3/8

package.json

private

// package.json

{
  "private": "true",
  ...
}
  • npm publish 하는 경우 명령어가 실행되지 않도록 강제하는 설정
  • npm publish 는 NPM Registry에 프로젝트를 업로드하는 것을 의미
  • Next.jscreate-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
  • 위의 경우 prismascope.
  • 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가 설치되지 않는다.

profile
깃허브: https://github.com/nearworld

0개의 댓글