티스토리 뷰

 

1. npm (Node Package Manager) 

- 자바스크립트 프로그래밍 언어를 위한 패키지 관리자

- Node Package Manager의 약어

- 노드가 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해줌 

- 패키지란? 업로드된 노드 모듈

- 모듈이 다른 모듈을 사용할 수 있는 것처럼, 파키지가 다른 패키지를 사용할 수 있음

 

 

프론트 엔드 개발에 Node.js가 필요한 이유? 

1. 최신 스펙으로 개발할 수 있음 

- 자바스크립트 스펙보다 브라우저의 지원속도는 항상 늦기 때문에, 여러가지 도구의 도움이 필요. 웹팩, NPM같은 노드 기술로 만들어진 환경이 필요

2. 빌드 자동화 기구 

- 코딩 결과물을 바로 브라우져에 올리지 않고 파일을 압축하고, 코드를 난독화하고, 폴리필 추가하고.. 개발 이외에 작업을 거친후 배포하는데 Node.js가 필요. 라이브러리 의존성해결 및 각종 테스트 자동화

3. 개발환경 커스터마이징 

- React의 CRA(Creat-reat-app)가 대부분인데 이는 툴을 그대로 사용할 수 없는 경우도 빈번하기 때문에 직접 환경을 구축해야하는 상황이 있을 수 있음 

 

2. npm 시작하기 

2.1 npm 시작하기 

- node.js 프로젝트를 시작하는 것 

$ npm init

으로 바로 시작하게 되면 package.json을 다 관리해주는게 나오는데

이때! 그냥 엔터키 막 누르고 다음 껄 치면 package.json 관리가 자동적으로 된다. 그러니깐 엔터키만 쭉 누르기~ 

 

package.json 

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

- scripts : 프로젝트를 자동화할 수 있는 shell script = 일종의 sample script  

$ npm test // Error: no test specified\" && exit 1

 

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "love": "echo \"you\"" 
  },
$ npm run love // you

 

npm 명령어 확인하기

$ npm 


Usage: npm <command>

where <command> is one of:
    access, adduser, audit, bin, bugs, c, cache, ci, cit,
    clean-install, clean-install-test, completion, config,
    create, ddp, dedupe, deprecate, dist-tag, docs, doctor,
    edit, explore, fund, get, help, help-search, hook, i, init,
    install, install-ci-test, install-test, it, link, list, ln,
    login, logout, ls, org, outdated, owner, pack, ping, prefix,
    profile, prune, publish, rb, rebuild, repo, restart, root,
    run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, team, test, token, tst, un,
    uninstall, unpublish, unstar, up, update, v, version, view,
    whoami

npm <command> -h  quick help on <command>
npm -l            display full usage info
npm help <term>   search for help on <term>
npm help npm      involved overview

Specify configs in the ini-formatted file:
    C:\Users\park\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

 

노드 버전 확인하기

$ npm run love // you

 

 

2.2 패키지 설치하기

npm install 하는 방법은 두가지가 있다. 

1. 첫번째는 패키지명을 명시해 특정 패키지를 설치하는 경우

- 하단의 경우 express package로 변경 

$ npm install express

 

 

2. 두번째는 패키지명을 명시하지 않고 package.json을 설치하는 동작

$ npm install

 

참고)

현재 프로젝트 설치? npm install [모듈명]

모든 프로젝트에 전역설치? npm install -g [모듈명] 

 

 

유의적 버전

^15.12.0의 의미?

- 프로젝트에서 사용하는 패키지의 버전을 엄격하게 제한하면 프로젝트를 버전업하는데 필요함 

- npm은 유의적버전(Sementic Version)에 따라서 패키지를 관리함 

- 유의적버전(Sementic Version)은 주(Major), 부(Minor), 수(Patch) 세가지 숫자를 조합해서 버전 관리

- V16.12.0 -> 주버전이 16 / 부버전이 12 / 수 버전이 0 

- 각 버전을 변경하는 기준 

   (1) 주버전 (Major Version) : 기존 버전과 호환되지 않게 변경한 경우

   (2) 부버전 (Minor Version) : 기존 버전과 호환되면서 기능이 추가된 경우 

   (3) 수버전 (Patch Version) : 기존 버전과 호환되면서 버그를 수정한 경우 

- 틸트(~)와 캐럿(^) 

  틸트(~)? 마이너 버전이 명시되어 있으면 패치 버전을 변경, ~1.2.3표기? 1.2.3~1.3.0미만까지 

  캐럿(^)? 정식버전에서 마이너와 패치 버전을 변경 ^1.2.3표기는 1.2.3부터 2.0.0미만까지 

 

 

package.json // 모든 react version 명시 

$ npm view react versions

 

$ npm install express socket.io --save

 

라고 치면 설치시에 package.json의 dependencies 부분을 업데이트 해준다. 

또한 --save라는 옵션을 붙여주면 자동적으로 package.json을 업데이트 해주는 역할을 가진다. 

-> 하지만 npm 5부터는 --save 옵션을 기본옵션으로 적용하기 때문에 --save를 사용하지않아도 dependencies에 항목이 추가 됨 

 

 

npm install expres

*  npm install express 이후 

 

Folder 

(1) node_modules

- Express가 의존하는 패키지

- 패키지 하나에 다른 여러 패키지에 의존하고, 그 패키지들은 또 다른 패키지에 의존

 

(2) package.json

- 기본적으로 key-value로 저장되는 단일 JSON객체 

- package.json에서는 버전 정보를 저장할떄 version range 사용 

- 정확하게 package명을 명시하는것이 아니라 버그 수정이 이루어질때마다 버전 수정 

  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "cors": "^2.8.5",
    "dotenv": "^10.0.0",
    "express": "^4.17.1",
    "helmet": "^4.6.0",
    "hpp": "^0.2.3",
    "moment": "^2.29.1",
    "mongoose": "^5.13.5",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.1",
    "web-vitals": "^0.2.4"
  },
  
  ...
  
  
   "devDependencies": {
    "@babel/cli": "^7.14.8",
    "@babel/core": "^7.14.8",
    "@babel/node": "^7.14.9",
    "@babel/polyfill": "^7.12.1",
    "@babel/preset-env": "^7.14.9",
    "babel-loader": "^8.2.2",
    "morgan": "^1.10.0",
    "nodemon": "^2.0.12"
    
  }
  
 ...

(2-1) dependencies => 프로덕션 환경에서 응용 프로그램에 필요한 패키지 for 기술 스펙으로 사용되어야할것 

 

 

(2-2) devDependencies  => 로컬 개발 및 테스트에만 필요한 패키지 for 개발자 

- webpack / babel이 devDependencies에 있는 이유? 

babel 및 webpack 패키지는 bundle.js 및 etc 파일의 banilla javascript에 코드를 변환하고 번들링할 때 에 사용되므로 devDependencies 섹션으로 이동합니다. 프로덕션에서 번들로 코드를 실행합니다.js 빌드/생성된 코드는 더 이상 이러한 종속성을 필요로 하지 않습니다.

 

 

(3) package-lock.json 

- npm으로 패키지를 설치 수정, 삭제할때마다 내부 의존관계를 이 파일에 저장, 즉 npm이 node_modules나 package.json이 수정될때 자동으로 생성 

- package-lock.json이 존재할때는 package.json을 사용하여 node_modules를 생성하는것이 아니라 package-lock.json을 사용하여 node_modules를 생성함 

 

 

 

 

3. npm 삭제 및 재설치

3.1 npm 재설치

(1) package.json 삭제 + node_modules 폴더 삭제

(2) npm install 

 

3.2 npm 삭제

* 기본 삭제

$ npm uninstall [node_module]

 

* package.json파일에서 모듈 제거 

$ npm uninstall [node_module] --save

 

npm outdated

- 의존성 모듈에서 새로운 버전이 나오면 모듈을 일일이 확인하려운데, 업데이트가 필요한 모듈 확인 가능 

- current : 현재 설치된 버전 / wanted : package.json에 지정한 버전 범위로 설치되는 최대 범위 , npm update 설치 

 

npm-check 

- 의존성 관리의 불편함을 덜어주는 cli 모듈 

- npm install -g npm-check 사용해서 전역으로 설치하면 사용가능 

- npm oudated보다  더 풍부한 데이터가 나옴 

 

 

 

 

* 모듈

(1) npm version 확인하기 

npm -v

 

(2) npm install ~  

npm i express cors dotenv hpp helmet

- express : 서버 프레임 워크  

- cors: 크지 않은 규모의 경우 백엔드랑, 서버로 둬도 상관없지만 웹 페이지를 다른곳에서 자원을 가져와야되는 경우가 빈번하게 발생, 다른곳에서 자원을 가지고 오게되는 프레임워크, 원래는 그렇지 않지만 cals를 설치해주면 편함 , 자유롭게 자원을 가지고 올 수 있음 

- dotenv : 외부에 공유를 하지 않기 위해서 특별하게 값들을 저장해놓고 자유롭게 쓸 수 있게 해주는 것 

- hpp, helmet : 서버 보안상 취약점을 보완해주는 기능 

 

* .gitignore 사용법

(1) .gitignore 파일을 하나 만든다 

(2) node_modules / .env를 기본적으로 쳐준다 

dependencies만 있으면 자동적으로 쳐줌 

 

 

 

 

 

(3) db 사용하기

npm i mongoose moment 

- mongoose : 몽고db를 javascript에서 설치하게 만들어주는것 

- moment : mongoose는 시간을 국제 시간으로 따름 , 한국시간으로? 설정해주는것 

 

node.js에서는 common.js라는 module 방식을 채택, 하지만 front 경우 일반적으로 es6라는 문법을 따름 

-> 통일성을 부여하기 위해 babel을 사용 

-> babel? javascript는 문법이 빠르게 변화, 최신 문법을 사용하고 싶은데 브라우저는 옛날 문법을 사용하는 상황 간극을 작게 해주는 것이 바벨, 바벨은 자바스크립트를  사용할때 사용하는 것이 필수 

 

(4) babel

- -D 넣어주는 이유? 개발단계 "devDependencies" 

npm i @babel/cli @babel/core @babel/node @babel/preset-env babel-loader @babel/polyfill -D

 

@babel/cli

- 바벨을 터미널에서 명령어 처럼 사용할 수 있게 도와주는 것 

 

@babel/core

- es6같은 코드를 변환시켜주는 것 

 

@babel/node

@babel/preset-env

 

babel-loader

- 실용적으로 컴파일을 해주는 것 

 

@babel/polyfill

- @babel/node로 실행하게 되면 최신 문법을 코드로 사용할 수 있게 해주는 것

- polyfill? 베개..? 여러가지 넣어서 어떠한 상황에서도 문법을 만들 수 있게 해주는 것 

 

 

 

(4)  npm i morgan nodemon  -D

 npm i morgan nodemon  -D

-morgan 서버에서 log기록을 보여주는것 

- nodemon 파일을 저장했을때 서버에 즉각적으로 반영시켜주게 하는 것 

cf) 이와 같은 과정은 당연히 개발단계에서만 필요하기 때문에 -D을 적어주기 

 

 

 

 

 

.env 파일 생성하기 

- node 프로젝트 개발을 하면 외부로는 알려지면 안될 민감 정보. 오픈소스 공개시 관련정보 유출위험

(1) setting 방법 

- 리눅스 -> export ~ / window -> set~ 

 

(2) setting 방법 

npm install dotenv

---

prettier 이쁘게 저장 

 

---

기본적인 sever 열기 - dev  

npm run dev

 

package.json 

  ...
  "scripts": {
    "dev": "nodemon ./server/server.js --exec babel-node",
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  ....

 

 

--------

>> npm install morgan cookie-parser express-session

 

 

>> npm install --save-dev nodeman

- 소스패키지가 바뀔 때마다 자동으로 재실행해주는 패키지 

 

 

>> npm install --global rimraf

- 전역 패키지 설치하기

 

 

>> rimraf node_module 

- 지정한 파일이나 폴더를 지우는 명령

- 전역설치한 경우 사용가능

 

 

>> npm install --save-dev rimraf

>> npx rimraf node_modules

- 전역 설치 안하는 경우 

 

 

 

npm install (plugin) --save와 --save-dev 차이점3

ithub.tistory.com/165

 

 

 

기본 javascript src 로딩하는것 만들기

1. npm init 프로젝트 설치

2. 

 

 

 

<출처> 

1. 5강 패키지 매니저, Node.js 교과서 

 

 

 

'Programming > Node' 카테고리의 다른 글

[Node.js] Webpack  (0) 2021.01.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함