Node.JS 에서는 require 메서드를 통해 외부 모듈을 가져올 수 있습니다. require 메서드는 node가 local object에 추가한 메서드로서 다음과 같이 파라미터로 추가할 모듈의 파일 경로값을 받습니다.
const foo = require('파일 경로');
require 메서드의 소스코드는 매우 복잡합니다. 하지만 요약하자면 아래와 같은 모양새로 구성되어 있습니다.
var require = function(src){
var fileAsStr = readFile(src) //line 2
var module.exports = {} //line 3
eval(fileAsStr) //line 4
return module.exports //line 5
}
먼저 line 1에서는 src의 인자를 받아옵니다 즉,
const foo = require('foo')
와 같은 경우 'foo'를 인자로 받아오는 식입니다.
line 2에서는 소스 파일을 읽어서 fileAsStr에 저장합니다.
line 3에서는 module.exports 라는 빈 해시를 만들어 둡니다.
line 4에서는 fileAsStr을 eval 합니다. 이 과정은 사실상 src를 복붙하는것과 같습니다.
line 4에 대해 조금 더 설명하면
const foo = require('./foo.js')
를 한다는 것은, 곧 require()의 인자로 "./foo.js"를 넣는 식이고 위 require()의 line 4는
eval(fileAsStr)
다음과 같이 변경되는 것과 마찬가지 입니다.
var require = function(src){
var fileAsStr = readFild(src)
var module.exports = {}
**const a = 10
exports.a = a;**
return module.exports
}
결국 exports 해시의 a라는 key에 10이 들어가는 모습입니다.
따라서, 아래 코드는
// bar.js
const foo = require('./foo.js')
console.log(foo.a);
Runtime에는 아래와 같은 모습입니다.
const foo = { a:10 }
console.log(foo.a)
foo 에서 exports에 들어간 <key, value> 들이 require() 함수의 아웃풋으로 나오는 것입니다.
exports
는 단순히 module.exports
를 참조할 뿐입니다.
공식문서에서 그게 다라고 합니다...!
module.exports
와 exports
는 같은 객체를 바라보고 있으며, exports
는 module.exports
의 shortcut입니다.
npm은 무엇인가요?
- npm 패키지를 -g 옵션을 통해 Global로 저장하는 것과 그렇지 않은 것은 어떻게 다른가요?
NPM은 Node Package Manager의 약자입니다. 자바스크립트 패키지 매니저이고, NodeJS에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할을 하며 설치/관리를 수행할 수 있는 CLI를 제공합니다.
npm install 명령어에는 지역(Local) 설치와 전역(Global) 설치 옵션이 있습니다. 옵션을 별도로 지정하지 않으면 지역으로 설치되며 프로젝트 루트 디렉터리에 node_module
디렉터리가 자동 생성되고 그 안에 패키지가 설치됩니다. 지역으로 설치된 패키지는 해당 프로젝트 내에서만 사용할 수 있습니다.
전역에 패키지를 설치하려면 npm install 명령어에 -g
옵션을 지정합니다. 전역으로 설치된 패키지는 전역에서 참조할 수 있습니다. 모든 프로젝트가 공통 사용하는 패키지는 지역으로 설치하지 않고 전역에 설치합니다.