it공부 (개념)/javascript

dependencies: 의존성이란? package.json과 함께 알아보기 /자바스크립트, Node.js

cantor 2023. 3. 19. 00:00

flaticon.com Smashcons님의 이미지

 

 

 

package.json

 

Node.js환경으로 자바스크립트 프로그래밍을 할 때, 

개발 프로젝트의 메타적인 정보가 저장되는 파일이다. 

 

*이름, 사용된 패키지 버전정보 등

 

 

어디에 쓰이는가?

 

 

파악:

package.json의 정보를 살펴봄으로써

프로젝트사용된 기술스택의 종류와 버전을 알 수 있다.

 

관리:

또 작성되어 있는 값들은 터미널의 여러 명령어에 연동되므로

패키지설치 및 관리, 테스트 케이스 실행 등 전체 프로젝트를 손쉽게 관리하는 데에 쓰인다.

 

 

package.json 생성하기

 

 

보통은 개발사작과정에서 다음 명령어를 터미널에 입력하여

프로젝트 초기화를 진행할 때 자동으로 생성된다.

npm init

 

생성된 package.json

{
  "name": "test", : 패키지를 npm에 퍼블리싱할 이름
  "version": "1.0.0", 이 패키지의 버전
  "description": "", 패키지에 대한 설명
  "main": "index.js", 패키지 프로그램의 Entry(최초 실행)파일
  "scripts": { 터미널에 run 명령어를 통해 실행할 코드들
    "test": "echo \"Error: no test specified\" && exit 1"
   
    npm run test를 입력하면 오른쪽에 값에 쓰인 명령어들이 실행된다.
  },
  "author": "", 작성자
  "license": "ISC" 라이센스
}

* 설명은 제가 직접 써넣었습니다.

 

 

 

또는 직접 프로젝트의 루트 폴더에

package.json라는 이름으로 새로운 파일을 만들어도 된다.

 

 

 

dependencies: 의존성

 

package.json의 내부에 dependencies(의존성) 값은

개발에 사용되는 react, typescript 아같은 패키지의 버전 관리에 이용된다.

 

프로젝트를 갓 초기화한 경우에는 저 항목이 없다.

하지만 npm i 혹은 npm install로 개발을 위한 여러 가지 패키지를 설치하면 

 

설치된 패키지의 버전을 표시하는 dependencies 값이 생성된다.

devDependencies를 추가하는 명령어
--save-dev

npm i typescript --save-dev

dependencies를 추가하는 명령어

npm i typescript

 

 

 

여러 가지 패키지를 설치한 경우 볼 수 있는 모습.

  "devDependencies": {
    "@babel/cli": "^7.21.0",
    "@babel/core": "^7.21.0",
    "@babel/node": "^7.20.7",
    "@babel/preset-env": "^7.20.2",
    "express": "^4.18.2",
    "nodemon": "^2.0.20",
    "pug": "^3.0.2",
    "typescript": "^4.9.5"
  },
  "dependencies": {
    "@types/express": "^4.17.17",
    "@types/socket.io": "^3.0.2",
    "@types/ws": "^8.5.4"
  }

 

무엇을 의미하는가?

 

dependencies: 실행에 필요한 패키지이름과 버전,

devDependencies: 개발 및 관리에 필요한 패키지이름 및 버전.

 

*사실 혼자 개발을 할 경우엔 위 두 개의 값에 대한 특별한 구분이 필요 없다.

 

 

그래서 버전관리는 어떻게하는가?

 

터미널의 npm install 명령어는 dependencies 및 devDependencies 값들과 연동되어 있다.

 

 

해당 명령어를 터미널에 입력하면

dependencies, devDependencies의 값에 맞는 버전으로

각 패키지들이 전부 설치된다.

 

사전에 원하는 버전을 입력해 주면 된다.

 

 

왜 필요한가?

 

 

기술이 계속 변화하기 때문이다.

 

 

npm i typescript

패키지를 설치할 때 위와 같이 별다른 버전정보 없이 패키지를 설치하면 

항상 최신버전의 패키지가 설치된다.

 

 

 

완전히 동일한 코드를 가진 프로그램이라 하더라도

설치된 구성 패키지들의 버전이 다르다면, 

동작이 상이하거나 아예 실행이 되지 않을 수도 있다.

 

 

따라서 협업을 할 때, npm i "이름"으로 패키지를 설치하지 말고

dependencies 값들을 공유하여 npm install 명령어를 사용하여 한번에 설치해야 한다.

 

 

다른 사람이 작성한 코드로 공부를 할 때에도

내 코드가 작동하지 않는다면, 오타문제가 아니라 패키지 버전 문제일 수 있다

 

가능하면 사전에 dependencies 값을 살펴보고 패키지를 설치하면 좋다.

 

 

 

 

읽어주셔서 감사합니다. 

오류나 오탈자를 발견하신다면 댓글로 지적해 주세요.