패키지

  • 모듈은 require() 함수에 의해 로드될 수 있는 node_modules 디렉토리의 파일 또는 디렉토리.
  • 모듈은 package.json 파일을 가질 필요가 없다. 따라서 모든 모듈이 패키지는 아니다.
  • package.json 파일을 가진 모듈들만 패키지다.

패키지 만들기

$ mkdir my_module
$ cd my_module
$ npm init -y

패키지의 구조

my_module/
    dist/
    examples/
    lib/
        index.js
    .gitignore
    .npmignore
    LICENSE
    package.json
  • dist/ - 배포용 디렉토리
  • examples/ - 예제들
  • lib/ - 패키지 소스

lib/index.js

exports.run = function() {
	console.log("Hello World");
}

package.json

{
  "name": "my_module",
  "version": "0.0.1",
  "description": "my module test",
  "main": "lib/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/oiehot/my_module.git"
  },
  "engines": {
    "node": ">=4.0.0"
  },
  "keywords": ["test"],
  "author": "oiehot",
  "license": "MIT",
  "bugs": "https://github.com/oiehot/my_module/issues",
  "homepage": "https://oiehot.com/node/my_module"
}

README.md

  • 패키지 도움말.
  • 마크다운 문법.

LICENSE

  • 라이센스 문구
MIT License

Copyright (c) 2019 HEROPY <thesecon@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

.gitignore 의 예

*.iml
.idea
.tscache
.DS_Store
node_modules/
typings/
coverage/
test/typescript/axios.js*
sauce_connect.log
package-lock.json

.npmingore 의 예

**/.*
*.iml
coverage/
examples/
node_modules/
typings/
sandbox/
test/
bower.json
CODE_OF_CONDUCT.md
COLLABORATOR_GUIDE.md
CONTRIBUTING.md
COOKBOOK.md
ECOSYSTEM.md
Gruntfile.js
karma.conf.js
webpack.*.js
sauce_connect.log

테스트하기

$ cd ..
$ md mytest
$ cd mytest
$ npm init -y
$ npm install --save d:/var/my_module
# $ npm install my_module
# $ npm install https://github.com/oiehot/my_module.git
# $ npm install --save https://github.com/oiehot/my_module.git
# $ npm install --save git+ssh://git@github.com/oiehot/my_module.git
  1. 새로운 테스트 NodeJS 프로젝트를 만든다.
  2. 로컬에 있는 내 모듈을 이 프로젝트에 설치한다.
  3. 다음 코드를 실행한다.
//import m from 'my_module';
const m = require('my_module');
console.log( m.run() );

npm에 배포하기

$ npm adduser or $ npm login
$ npm logout
$ npm whoami
$ npm publish
# $ npm publish --access public

참고자료