팩키지와 모듈
팩키지
다음의 어떤 것도 팩키지가 될 수 있습니다.
- a) package.json 파일에 의해 표현되는 프로그램을 포함하고 있는 폴더
- b) (a)를 gzip으로 압축한 파일
- c) (b)에 대한 url
- d) (c)를 통해서 레지스트리에 퍼블리쉬된
<name>@<version>
- e) (d)를 가리키는
<name>@<tag>
- f)
latest
로 태구된<name>
- g) (a)로 clone이 되는 git URL
여러분의 팩키지를 공개된 레지스크리에 퍼블리쉬하지 않더라도 npm을 사용함으로써 얻을 수 있는 많은 장점이 있습니다.
- 그냥 node 프로그램을 작성할 수 도 있으며
- 이 프로그램을 압축해서 다른 곳에 쉽게 설치할 수 있습니다.
모듈
Node.js 프로그램내에서 require()
로 로드할 수 있는 것을 모듈이라고 합니다. 다음의 예 모두가 모듈로 로드될 수 있습니다.
main
필드를 가진package.json
파일을 포함하고 있는 폴더index.js
파일을 포함하고 있는 폴더- JavaScript 파일
대부분의 npm 팩키지는 모듈
일반적으로 Node.js 프로그램에서 사용된느 npm 팩키지들은 require
를 통해서 로드되므로 모듈이라고 할 수 있습니다. 하지만 npm 팩키지가 반드시 모듈이어야할 필요는 없습니다.
실행가능한 명령행 인터페이스를 포함한ㄴ cli
와 같은 팩키지는 Node.js 프로그램에서 사용할 수 있도록 하는 main
필드가 없습니다. 따라서 이 팩키지는 모듈이 아닙니다.
대부분의 팩키지 (Node 프로그램이라면)는 많은 모듈을 포함하고 있습니다.
Node 프로그램의 문맥상, module
은 파일에서 로드되는 것을 뜻합니다.
var req = require('request')
Node.js와 npm 생태계에서의 파일과 디렉터리 이름
package.json
파일은 팩키지를 정의합니다.
node_modules
폴더는 Node.js가 모듈을 찾는 장소입니다.
예를 들어 node_modules/foo.js라는 파일을 생성하고 프로그램에서 모듈을 로드하기 위해서 var f = require('foo.js')
라고 하면 foot.js
에는 package.json 파일이 없으므로 "package"가 아닙니다.
이와 다르게, index.js
이 없고 package.json
내에 main
필드가 없는 팩키지를 만들었다면 이 팩키지는 모듈이 아닙니다. 따라서 node_modules
에 설치된다 하더라도 require()
로 로드될 수 없으므로 모듈이 아닙니다.