ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 노드 node_modules 와 npx, SemVer
    노드 2023. 4. 14. 15:16

    node_modules

    npm install 시 node_modules 폴더가 생성된다.

    • 내부에 설치한 패키지들이 들어 있다.
    • express 외에도 express와 의존 관계가 있는 패키지들이 모두 설치된다.

    설명을 하자면 express를 설치를 하면 express도 node 프로젝트이고 npm패키지니까 express만의 dependencies가 있을 것이다. 그래서 npm i express 하면 express의 dependencies 까지 모두 같이 설치가 되는 것이다 .

    즉, 패키지를 설치하면 그 패키지의 dependencies까지 모두 설치가 된다. 

    *지금은 자세히 알 필요는 없지만 실제로 배포할 때는 node_modules는 지우고 package.json, package-lock.json만 가지고 배포한다. 이유는 node_modules는 너무 용량을 많이 차지하기 때문이다. 

     

    *npm i -g [패키지 이름]

    -g는 전역으로(글로벌) 설치를 하겠다~라는 옵션이다. 이렇게 설치된 패키지는 dependencies에 추가가 되지 않는다. 따라서 다른 사람이 봤을때 프로젝트에 전역으로 설치된 패키지들의 존재를 모를 가능성이 매우 커질 수 있다는 것이다. 

    그래서 요즘에는 전역 설치를 지양하고 있다. 아니면 개발용으로만 -D 설치를 한다.  

     

    글로벌(전역) 패키지만 다시 정리하자면 다음과 같다

    npm install --gloabl 패키지명 또는 npm i -g 패키지명

    • 모든 프로젝트와 콘솔에서 패키지를 사용할 수 있다.
    • npx로 글로벌 설치 없이 글로벌 명령어 사용 가능

     

    {
      "name": "npmtest",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "Pocarl",
      "license": "MIT",
      "dependencies": {
        "body-parser": "^1.20.2",
        "cookie-parser": "^1.4.6",
        "express": "^4.18.2"
      },
      "devDependencies": {
        "nodemon": "^2.0.22"
      }
    }

    콘솔에 npm i -g rimraf를 입력하면 rimraf가 설치가 되지만 dependencies에는 추가가 되지 않는 것을 확인 할 수 있다.

     

    rimraf node_modules 하면 rimraf를 전역으로 설치했기 때문에 콘솔에서 명령어처럼 사용이 가능해서 node_modules를 삭제할 수 있다. 

     

    그리고 전역으로 설치 하지 않아도 npx rimraf node_modules 하면 전역 설치를 하지 않았어도 node_modules를 삭제할 수 있다. 

     

    SemVer 버저닝

    노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따른다.

    • Major(주 버전), Minor(부 버전), Patch(수 버전)
    • 노드에서는 배포를 할 때 항상 버전을 올려야 한다.
    • Major는 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올린다.
    • Minor는 하위 버전과 호환되는 수정 사항이 생겼을 때 올린다.
    • Patch는 기능에 버그를 해결했을 때 올린다. 

    첫 번째 자리가 바뀌면 프로그램이 동작을 하지 않을 수 있다. 

    첫 번째 자리가 변했다 라고 한다면 그건 대대적인 수정이 있어서 기존 코드가 돌아가지 않는다는 뜻이다. 

     

    두 번째 자리가 변하는 기준은 무언가 수정은 생겼는데 기존 코드를 가지고 있었던 사람이 안심해도 올려도 될 때이다. 

     

    세 번째 자리는 마이너한 버그수정을 했을 때 변한다. 

     

    노드 패키지에서는 코드에서 한 글자만 바꿔도 버전의 숫자를 올려야 한다. 그런데 어떤 자리의 숫자를 올려야 하는지는 위에서 설명한 유의적 버저닝을 따라서 올리면 된다. 

     

    버전 기호 사용하기

    버전 앞에 기호를 붙여 의미를 더한다.

    • ^1.1.1 : 패키지 업데이트 시 minor 버전까지만 업데이트 됨(2.0.0 버전은 안 됨)
    • ~1.1.1 : 패키지 업데이트 시 patch 버전까지만 업데이트 됨(1.2.0 버전은 안 됨)
    • >=,<=, >, <는 이상, 이하, 초과, 미만 을 의미한다.
    • @latest는 최신을 의미한다.
    • @next로 가장 최신 배포판 사용 가능(불안정함)
    • 알파/베타/RC 버전이 존재할 수도 있다.(1.1.1 -alpha.0, 2.0.0-beta.1, 2.0.0-rc.0)

    살짝 풀어서 설명을 하자면...

    dependencies에서 "express" : "^4.1 이렇게 되어 있다면 major는 고정하겠다 라는 뜻이다. 

    ~를 사용한다면 minor자리까지 고정하겠다는 뜻이다. 

    만약 express 버전이 1.1.1 이라고 한다면 그건 3번째 자리까지 고정하겠다는 뜻이다. 

     

    npm i express@lastest 하면 최신판을 설치하겠다는 뜻이다.

    npm i express@3 하면 3버전을 설치하겠다는 뜻이다. 

     

    '노드' 카테고리의 다른 글

    npm 배포하기  (0) 2023.04.14
    노드 npm 명령어  (1) 2023.04.14
    npm  (0) 2023.04.14
    노드 클러스터 cluster  (0) 2023.04.14
    노드 https, http2  (0) 2023.04.14
Designed by Tistory.