February 08, 2020
구체적으로 nodeJS로 무엇을 할 수 있을까?
자바스크립트 X nodeJS -1 (module)에서 이어집니다.
npm
(node package manager) : 자바스크립트 프로그래밍 언어를 위한 패키지 관리자
앞선 포스트에서 모듈
에 대해서 알아보았다.
nodeJS에서는 npm이라고 패키지
를 관리할 수 있는 프로그램이 내장되어 있어서 필요한 패키지를 내 프로그램에 다운로드 받을 수도 있고, 패키지를 내가 제작해서 업로드 할 수도 있다.
그리고 내 프로그램에 사용되는 패키지들을 관리(대표적으로 dependency
부여)해주기도 한다.
모듈 : 특정한 기능을 하는 함수나 변수들의 집합
자바스크립트 X nodeJS -1 (module)>모듈시스템
패키지 : 이런 모듈들을 용도에 맞게 패키징한 하나의 프로그램
dependency : 패키지들이 충돌하지 않게 npm은 패키지마다 의존성을 부여해준다.
내가 프로그램을 만들면 (완전 간단하더라도) 그것도 하나의 패키지이다. 그 만들어진 패키지의 이름, 버전, 내 패키지에서 사용된 패키지 등 내 패키지에 관한 스펙을 명시해주는 파일이 package.json
이다.
package.json은 직접 만들거나 npm init
이라는 명령어를 통해 자동 생성할 수 있다.
// package.json
{
// 패키지 이름
"name": "taenylog",
// 패키지 버전
"version": "1.0.0",
// 설명
"description": "",
// 키워드(npm search로 검색됨)
"keywords": "blog"
// 홈페이지
"homepage": "https://taeny.dev",
// 패키지의 시작점이 되는 module ID
"main": "index.js",
// ⭐ 스크립트
"scripts": {
"dev": "nodemon",
"build": "next build"
},
// 패키지 저자
"author": "taenykim",
// 라이센스
"license": "MIT",
// ⭐ 의존성 패키지
"dependencies": {
// ⭐ 패키지명 + 패키지 버전
"typescript": "^3.7.5"
},
// ⭐ 의존성 패키지 (개발용)
"devDependencies": {
}
// ... 이외에도 많음
}
npm 명령어로 실행시킬 수 있는 명령어를 등록한다.
//nodemon 실행
npm run build
//next build 실행
npm run dev
내 프로그램에 의존된 패키지들을 기록한다.
npm 을 통하여 패키지를 다운로드 받으면 자동으로 기록된다.
npm i
를 통하여 dependencies 에 기록된 의존성 패키지를 모조리 다운로드 받을 수도 있다.
다운로드 받은 패키지들은 node_modules 디렉토리에 저장된다.
node_modules 디렉토리는 패키지의 모듈들의 의존관계를
트리형태
로 저장한다.
{
"dependencies": {
// 캐럿(^) : 3.7.5 <= x < 4.0.0
// 맨앞자리 버전이 바뀌지 않으면서 가장 최신버전
"typescript": "^3.7.5",
// 틸드(~) : 9.2.1 <= x < 9.3.0
// 두번째자리 버전이 바뀌지 않으면서 가장 최신버전
"next": "^9.2.1"
}
}
내 패키지를 개발할 때 필요한 의존성 패키지들을 기록한다.
배포나 번들 시에 포함되지 않는다.
"devDependencies": {
"nodemon": "^2.0.2",
"webpack": "~4.41.5"
}
package-lock.json 파일은 node_modules 에 저장된 패키지의 모듈들의 의존성 관계를 기록한다.
node_modules 에 저장되는 모듈이 트리형태로 저장되듯이, package-lock.json 에서도 트리형태로 기록된다.
npm init : package.json 파일 생성
npm install + 패키지명@version : 패키지 설치
package.json ‘dependency’에 기록
npm install -D : 패키지 설치 (개발용)
package.json ‘devDependency’에 기록
npm install -g : 패키지 글로벌 설치
npm ls : 패키지 의존성 트리 보기
npm start : scripts 의 start 부분 실행
scripts에 start 가 없다면 node server.js 실행
npm run script
: scripts 부분의 명령어 실행
npm cache clean : npm 캐시를 지움
앞선 포스트에서 브라우저에서 자바스크립트를 실행할 때, 실행컨텍스트의 scope chain에 전역객체로 window
가 담기는 것을 알아보았다.
nodeJS 에서도 console.log() 를 쓸 수 있으니 console객체를 내장한 전역객체 global
이 존재한다.
💡 💡 💡 window 내장 객체를 생략해서 쓸 수 있는 이유가 실행컨텍스트 this(호출자)에 담겨서 인 줄 알았는데 scope chain 최상단에 전역객체로 존재하기 때문이었다!
// 🔥 nodeJS 환경에서 this 출력
node
> console.log(this)
// 결과값 : global <Object>
// 🔥 nodeJS로 console.log(this)가 적힌 프로그램 실행
// test.js
console.log(this)
node test.js
// 결과값 : {}
// 🔥 nodeJS로 모듈 속성을 넣어준 프로그램 실행
// test2.js
module.exports.name = "taeny"
console.log(this)
node test2.js
// 결과값 : {name: 'taeny'}
nodeJS 프로그램 내부에서 this 는 global 전역객체를 가리키고 nodeJS를 통해 실행한 javascript 프로그램의 this는 해당 모듈을 가리킨다.
dirname
: 현재 디렉토리 경로
dirname
: 현재 디렉토리 경로 + 파일명
module 객체 사용
// 전체 모듈화
// moduleName1 객체에 모든 내용 담기!
module.exports = moduleName1
// 부분 모듈화
module.exports.function functionA() {}
exports 객체 사용
// 부분 모듈화
exports.function functionA() {}
exports.function functionB() {}
모듈을 만들 때, module이라는 객체 안의 exports 속성(객체)에 모듈이름과 같이 넣어준다.
module 객체를 사용하지 않고 exports 객체를 사용할 때는 모듈의 속성을 꼭 명시해야함.
module 과 module.exports 의 참조방식
var module = { exports: {} }
var exports = module.exports
현재 nodeJS 에서 실행되는 프로세스에 관한 정보를 담고있는 객체
해당 프로그램의 환경변수
를 담고있는 객체
환경변수 : 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임
환경변수는 key-value 값의 형태로 정의되어있으며, 예시로는 JDK를 설치한 후, 해당 key값(value)에 path(경로) 를 넣어주는 경우가 있다.