Node.js와 npm

PARK·2021년 2월 15일
0

서버 및 Node.js

목록 보기
4/7
post-thumbnail

1. Node.js와 npm

패키지를 관리하기 위해서는 우선 node.js와 npm에 대한 기본지식이 있으면 좋습니다.

node

자바스크립트가 브라우저 밖에서 사용할 수 있도록 해주는 환경(런타임)입니다.

npm

npm은 명령어 집합이라고 생각하시면됩니다. npm을 통해서 자바스크립트 라이브러리를 설치하고 관리합니다.

https://nodejs.org/ko/

node 설치로 npm을 사용할 수 있습니다.

2. package.json

npm init

{
  "name": "npmtest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "fdsa09876",
  "license": "MIT"
}

기본적으로 생성되는 파일입니다. 나머지는 명령어 과정에서 생성하지만 scripts는 알아서 생성됩니다. scripts는 터미널에 치는 명령어의 별칭 모임입니다. 터미널에 명령어를 실행하면 Error: no test specified\" && exit 1에러를 발생합니다.

npm run test

run은 생략가능합니다. 보통 scripts에 start: index로 수정해서
npm start로 실행합니다.

package.json은 프로젝트의 전반에 대한 정보와, npm을 활용하기 위한 정보가 모여있는 파일입니다.

일반적으로 루트 디렉토리에 위치하기 때문에 npm을 통해 만들어지는 node-modules 파일과 헷갈리면 안됩니다.

npm로 라이브러리를 다운받으면 node-modules에 저장되고 package를 통해 정보를 알려준다고 생각하시면 됩니다.

node-modules vs package.json

node-modules은 실제 프로그램을 실행시키기 위한 모듈이 저장되어 있습니다. package.json은 말했듯이 정보를 모아놓은 파일입니다.

package.json을 설명드린 이유는 npm을 사용하면 package.json는 자동 생성되기 때문입니다.

package파일이 필요한 이유는 다양합니다. 대표적인 이유는 프로젝트 사용 및 배포할 때 패키지를 참고해서 어떤 라이브러리가 필요한지 확인할 수 있습니다.

정보만 공유하면되니까 사용자는 선택적으로 라이브러리를 사용할 수있고, 배포 속도는 빨라질 것입니다. 팀 프로젝트라면 더욱 필요성이 높을 것입니다.

배포할 때 node-modules은 빼고 package.json만 배포합니다.

npm i

이후 npm i를 통해 package에 있는 라이브러리를 다운받습니다.

배포뿐만 아니라 init가 아니고 직접 package를 작성했더라도 npm i를 통해서 모듈과 lock 파일을 다운받아야 합니다.

package파일을 사용하지 않는다면 일일이 script를 통해서 라이브러리를 사용해야 하므로 불편합니다.

3. devDependencies와 dependencies

https://nodejs.dev/learn/the-package-json-guide

package.json 파일 목록에 대한 명세는 방대하고 선택적임으로 링크를 참고해서 파악하시는 게 좋을 듯 합니다.

package.json 관리 목록 중 많이 헷갈리는 의존성에 대해서만 살펴보겠습니다.

단적으로 devDependencies는 개발용, dependencies는 배포용입니다.

npm install --save or npm i
dependencies <배포 의존성>

npm install --save-dev or npm i -D
devDependencies <개발 의존성>

devDpendencies은 최종 애플리케이션 빌드시 코드 안에 포함되지 않습니다. 따라서 배포용으로 사용하지 않는 라이브러리는 devDependencies에 저장하면 됩니다.

-g로 글로벌 설치하기

npm -i -g express

-g는 글로벌 설치로 많이 알고있습니다. 이렇게 설치하면 실행 디렉토리에서만 사용 가능한 것이 아니라 시스템 전역에서 사용할 수 있는 장점이 있습니다.

하지만 배포를 생각하면 단점이 있습니다. 실행 디렉토리의 dependencies에 기록되지 않기 때문입니다.

npm -i express or npm -i -D express

그래서 전역으로 사용하기 위한 다른 방법으로는 일반적인 설치를 하고(-g옵션없이 설치) 사용할 때 npx를 사용하는 것입니다.

npx express

라이브러리가 모두 배포용으로 포함되면 빌드시간이 늘어납니다. 그렇기에 의존성을 살펴서 package.json을 저장해야합니다. 개인적으로 -D옵션을 사용하지 않는데 이번에 npm을 공부하면서 배우게 되었습니다.

react, axios, router와 같이 애플리케이션 서비스를 위해 필수적인 것이 배포용. wepack,sass eslint와 같은 것이 개발용의 예가 되겠습니다.

profile
익숙한 것에 작별을 고해야한다

0개의 댓글