1. 모듈이란?
Nodejs 환경에서 Javascript를 사용하면, 브라우저를 이용할 때에 비해서 훨씬 더 다채로운 작업들을 할 수 있다. 여러가지 작업들을 위해서 '기능별로 미리 만들어 놓은 코드' 가 있는데, 이것들을 모듈이라고 한다. node.js 자체에 포함된 내장모듈들의 list는 참조1) 에서 확인할 수 있다.
2. 모듈 사용법
브라우저에서 모듈을 사용하기 위한 방법은 아래와 같다.
1
|
<script src="불러오고싶은_스크립트.js"></script>
|
cs |
node.js 에서는 코드 상단에 require 구문을 사용하여 모듈을 불러온다.
1
2
|
const fs = require('fs')
const dns = require('dns')
|
cs |
node.js에서 공식적으로 제공하지 않는 3rd-party 모듈을 사용하기 위해서는 다음과 같은 명령어를 통해 사용한다.
(대괄호 [] 제외)
npm install [name of 3rd party module]
3. 모듈 생성, export, require, nodejs 실행
직접 모듈을 작성하고, export를 통해서 다른 코드 파일에서 해당 모듈을 사용할 수 있다. 모듈을 생성하는 방법은 다음과 같이 2가지가 있다. (참조2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
// 1. exports에 직접 프로퍼티를 설정
exports.add = function(a, b){
return a + b;
}
exports.multiply = function(a, b){
return a * b;
}
// 2. 새로운 객체에 프로퍼티를 설정 후 module.export로 내보내기
var calc = {};
calc.add = function(a, b){
return a + b;
}
calc.multiply = function(a, b){
return a * b;
}
module.exports = calc;
|
cs |
모듈을 불러오는 방법은 앞서 설명한 바와 같이 require 함수를 호출하면 된다.
파일 경로 앞에 './'를 붙여주어 상위 폴더로 이동 후 해당 파일을 조회해주어야 하고, 확장자인 .js를 생략해도 된다.
1
2
3
|
var calc = require("./calc");
console.log(calc.add(3, 5));
|
cs |
실제 모듈의 실행은 "node 파일명.js"로 실행한다.
require 전에 작성한 모듈을 어떻게 내보내는지(export) 모듈을 실행하여 알아보자.
1. 객체와 그 속성(메소드)을 export 하는 경우
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
|
// 1. test.js 파일
let calc = {};
calc.add = function(a, b){
return a + b;
}
calc.multiply = function(a, b){
return a * b;
}
let itself = {};
itself.print = (self) => {
return self;
}
module.exports = {
adding : calc.add,
it : itself.print
}
//2. test2.js 파일
const test = require('./test');
console.log(test.adding(2,3))
console.log(test.it(10))
|
cs |
test1.js : 객체 생성 후 export
test1.js 파일에서 calc, itself 라는 객체를 정의하고, 각 add,multiply 와 print 속성을 추가해줬다. 여러 객체를 한 번에 내보내야 하므로, module.exports에 "adding, it"라는 객체를 지정하여 할당해주었다.
test2.js : require문으로 객체 받아오기
test2.js 파일에서는 require(file path)를 입력하여 module.exports 객체를 test라는 변수에 할당해주었다.
그리고 console.log를 통해 값이 정상적으로 출력되는 것을 확인하였다.
위와는 다른 형식으로, 객체가 아닌 각 함수들을 선언하고, 함수의 앞에 exports를 개별적으로 붙여주는 방식도 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
|
// 1. test.js 파일
exports.add = function(a, b){
return a + b;
}
exports.multiply = function(a, b) {
return a * b;
}
// 2. test2.js 파일
const test = require('./test');
console.log(test.add(2,3))
|
cs |
2. Module.exports와 exports의 차이
module.exports는 해당 구문 위에 작성된 코드를 module.exports라는 객체에 해시 형태로 담는 방식이다. 따라서, module.exports를 여러 번 선언하면 마치 변수에 객체를 할당하는 것처럼 마지막에 지정한 변수에 module.exports의 값이 할당된다.
exports는 module.exports의 alias(별칭)인데, module.exports와 같은 주소를 가리키므로 중복 적용하거나 덮어쓰지 않도록 주의하여야 한다.
예제
1
2
3
4
5
6
7
8
9
|
// 1. test.js 파일
let a = 10;
exports.a = 20;
module.exports.a = 30;
// 2. test2.js 파일
let practice = require('./test.js')
console.log(practice)
|
cs |
test2.js 파일을 node test2.js 명령어로 실행하면, "{a : 30} " 이라는 결과가 나오게 된다.
참조
1. nodejs 공식문서의 index
nodejs.org/dist/latest-v12.x/docs/api/
2. blog
'Programming-[Backend] > Node.js & Server' 카테고리의 다른 글
nodejs / 모듈 / fs.readFile (0) | 2020.10.01 |
---|---|
Node.js / 기초 / NVM, NPM, package.json (0) | 2020.08.31 |