ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [NPM] Sementic Versioning
    개발/Javascript 2022. 6. 26. 17:14

    npm install을 이용해 라이브러리를 설치하면

    package.json과 package-lock.json이 생깁니다.

    두 파일에 모두 버전 정보가 들어있는데

    package-lock.json에 더 자세한 정보가 들어있습니다.

    공통적으로 x.x.x로 표현되는 버전을 발견할 수 있습니다.

     

    x.x.x로 표현되는 버전은 각 자리마다 의미가 있습니다.

    이를 sementic version이라고 합니다(혹은 semver).

    맨 앞이 메이저 버전, 가운데가 마이너 버전, 마지막이 패치 버전입니다.

     

    1. 기존 버전과 호환되지 않게 API가 바뀌면 메이저 버전을 올립니다

    2. 기존 버전과 호환되면서 새로운 기능이 추가되면 마이너 버전을 올립니다.

    3. 기존 버전과 호환되면서 버그 픽스가 이루어진 것이면 패치 버전을 올립니다.

     

    package.json은 파일 혹은 모듈을 한데 모아놓은 집합입니다.

    개발자가 자신의 개발 환경에 다운로드할 수 있는 재사용 코드입니다.

    package.json에는 다음과 같은 정보들이 기록됩니다.

    - 패키지의 이름

    - 패키지의 버전

    - 의존성 파일의 목록

     

    package.json에 있는 라이브러리를 보면 버전에 숫자만 있지 않고

    ^(caret), ~(tilde) 등이 붙어 있는 걸 볼 수 있습니다.

    caret과 tilde의 의미를 알아야 어느 범위의 버전이 설치될지 알 수 있습니다.

     

    1. ^(caret)

    semver의 0이 아닌, 첫 번째로 등장하는 숫자를 올리지 않는, 자신을 포함한 모든 상위 버전이 해당됩니다.

    lodash라는 패키지 버전을 통해 더 자세하게 알아보겠습니다.

     

    ^4.16.1에서는 메이저 버전인 4를 초과하지 않는 4.16.1을 포함한 모든 상위 버전을 뜻하게 됩니다.

    이 경우에서는 마이너 버전 업데이트가 이루어지겠네요.

     

    ^0.4.1은 마이너 버전인 4를 초과하지 않는 0.4.1을 포함한 상위 버전을 뜻합니다.

    이 경우에서는 패치가 업데이트 됩니다.

    2. ~(tilde)

    동일한 마이너 버전 안에서 자신을 포함한 모든 상위 버전을 뜻하게 됩니다.

    ~4.16.1은 다음과 같습니다. ^4.16.1과 어떻게 다른지 확인해보세요.

    패치 업데이트가 이뤄집니다.

    ~0.4.1은 ^0.4.1과 결과가 똑같습니다.

     

    caret과 tilde 외에 >, <, =, >=, <=, - 등을 사용할 수 있습니다.

    자세한 건 공식 문서에서 확인할 수 있습니다.


    혼자서 하는 프로젝트에서는 상대적으로 라이브러리 버전에 관심을 덜 가져도 됩니다.

    다른 환경에서 작업하다가 버그가 발생해도 누군가에게 피해를 줄 일이 없기 때문입니다.

    힘들어도 혼자 힘들지, 민폐 끼칠 일이 없습니다.

    그러나 누군가와 같이 한다면 이야기가 달라집니다.

    소프트웨어 버전에 따라서 기능 여부가 달라지고 버그 유무가 다릅니다.

    소프트웨어의 버전을 맞추지 않으면

    내가 작업할 때는 문제가 없던 것이 다른 사람이 작업할 땐 문제가 생길 수 있고

    반대로 나만 문제를 겪을 수도 있습니다.

    이쪽이나 저쪽이나 생산성을 저해시키는 요인입니다.

     

    이를 해결하기 위해서, 프로젝트를 팀 단위로 진행할 때 package-lock.json도 원격 저장소에 커밋해야 합니다.

    앞서 말했듯 package.json과 package-lock.json은 의존성을 설치할 때 같이 생성되고

    라이브러리 정보가 같이 기록되는데, package-lock.json에는 더 자세한 정보가 있으며 정확한 버전이 쓰여 있습니다.

    그리고 그 버전이 실제로 설치된 버전입니다.

     

    package-lock.json이 있어야 node_modules 폴더에 있는 파일 트리가 만들어집니다.

    이 파일은 크게 다섯 가지의 목표를 수행합니다.

    • 정확히 같은 의존성을 설치해 팀원, 배포, 지속적인 통합이 보장되도록 하는 단일 의존성 표현을 설명
    • 디렉토리 자체를 커밋하지 않고도 node_modules의 이전 상태로 시간 여행을 할 수 있는 유용성 제공
    • 읽기 쉬운 소스 제어 차이 통해 트리 변화의 가독성을 높임(깃에서 소스 차이 확인 가능하므로)
    • 이전에 설치된 패키지에 대해 반복되는 메타데이터를 건너뛰어 설치 프로세스를 최적화
    • npm v7기준, package.json을 읽기를 줄이고 패키지 트리를 그리기 위한 충분한 정보를 얻을 수 있어 눈에 띄는 성능 개선이 있음

     

    참고

    https://semver.org/lang/ko/

    https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json

    https://semver.npmjs.com/

    https://www.quora.com/What-is-the-difference-between-a-tilde-and-a-caret-in-an-NPM-package-JSON-file

    '개발 > Javascript' 카테고리의 다른 글

    [Express] 스태틱 파일 경로  (0) 2022.07.02
    [NodeJs] Buffer와 Stream  (0) 2022.06.28
    [RegExp] $1  (0) 2022.06.26
    [JavaScript]중복 제거(feat. Set의 한계)  (0) 2022.06.21
    [VScode] 익스텐션으로 Prettier 설정하기  (0) 2022.05.31

    댓글

Designed by Tistory.