package.json

김금동·2021년 11월 21일
0

node

목록 보기
1/1

먼저 package.json을 얘기하기 전에 node.js와 npm부터 얘기를 꺼내야 할 거 같다.

node.js는 v8엔진(크롬도 v8엔진으로 만들어짐)위에 있는 자바스크립트 런타임이다. node를 깔면 npm은 세트로 같이 깔리게 되는데

npm이란 node package manager 혹은 node package modules의 약자이며 npm repository에 있는 package들을 인터넷에서 손쉽게 다운받을 수 있게 해준다.
쉽게 말해 package관리툴이다.

(패키지 관리툴은 npm뿐만 아니라 yarn도 있고 yarn이 보안성,속도,안정성면에서 좋다고 하지만 일단 초심자에게는 npm을 어느정도 숙달한 후 한계를 맛보는게 좋다고 하기때문에 일단 npm을 쓰자.)

npm install express를 써서 express 패키지를 다운받아서 express 웹프레임워크를 이용할 수도 있고 npm install mongoose를 써서 mongoose 패키지를 다운받아서 쉽게 mongodb와 연결하여 db를 이용할 수 있다.

이때 이런 패키지들은 모두 package.json이란 파일을 가지고 있다.
(npm repository에 올릴려면 package.json이 무조건 필요하기 때문)

이런 package.json이 왜 필요하고 무엇인지 정확히 알아보자

package.json란 프로젝트를 정의하고 패키지 버전정보를 명시하는 파일이다.
그러니까 크게 2개의 정보가 기록된다
1. 프로젝트 정보
2. 패키지 정보

  1. 프로젝트 정보
    프로젝트의 정보를 담는 항목은 여러가지가 있지만 가장 중요한
    name항목과 version 항목이다.
    (이 두개가 누락되면 패키지 설치x)

1)name
name에는 조건과 팁이 있는데 아래사이트에 자세하게 적혀있다. 아래사이트는 name에 대한 정보뿐만 아니라 package.json의 많은 항목이 자세하게 적혀있어 package.json을 수정할 때 참고하면 좋을 것 같다.

https://programmingsummaries.tistory.com/385

2)version
version은 시맨틱 버저닝 규칙을 따르는데 .dot을 기준으로
x.x.x == major.minor.patch라고 부른다

각각을 언제 바꾸는지 틸드와 캐럿은 어떻게 쓰이는지는 아래 사이트를 참고하면 좋을 것 같다.

시맨틱 버저닝:https://velog.io/@skyepodium/package.json
직접 틸드와 캐럿을 넣으면서 확인할 수 있는 사이트:https://semver.npmjs.com/

  1. 패키지 정보
    패키지 정보는 두개의 항목에 저장될 수 있는데
    dependencies와 devdependencies항목이다.

1)dependencies
프로덕션 환경에서 코드상 쓰고 있는 패키지를 작성하는 곳이다.
npm install <package이름>하면 이 항목에 저장된다.

2)devdependencies
개발 환경에서 쓰고 있는 패키지를 작성하는 곳이다.
npm install -D <package 이름> 하면 이 항목에 저장된다.

나도 아직까지는 dependencies만 써봐서 나중에 devdependencies항목도 써보면 더 수정해야겠다.

https://c17an.netlify.app/blog/node.js/npm-install-%EC%A0%95%EB%A6%AC/article/

위 사이트는 이 둘 항목을 어떻게 쓰고 언제쓰는지 예시를 들어 자세하게 나와있다.

package-lock.json

아마 어느순간 이런 파일이 생겼더라면 그건 npm install 명령을 쳤기 때문이다.
package.json은 버전을 정확하게만 기록하지 않는다.

-----------package.json--------------

    "ejs": "^3.1.6",
    // >=3.1.6 <4 까지 업데이트 허용가능
    "eslint": "^7.32.0",
    // >=7.32.0 <8 까지 업데이트 허용가능
    "express": "^4.17.1",
    // >=4.17.1 <5 까지 업데이트 허용가능
    "mongoose": "^6.0.7"
    // >6.0.7 <7 까지 업데이트 허용가능

이런식으로 기록한다.
그래서 npm의 버전이 달라지면 npm install을 했을 때 다른 버전의 패키지가 다운될 수도 있다.(그러면 실행이 안되는 경우가 발생가능)
그래서 정확한 패키지 버전의 package.json이
package-lock.json이다.
그래서 commit을 할 때 내가 정확히 어떤 버전을 이용해서 이 프로그램을 실행했는지 알려주기 위해 package-lock.json도 같이 올려줘야한다.

추가적으로..
모듈과 패키지를 헷갈리지 말자.
require로 모듈을 가져온다고 패키지가 아니다. package.json파일이 있어야 패키지다.

profile
나원래chu해

0개의 댓글