NPM account

首先,當然是先註冊一個NPM帳號

創建一個NPM project

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
> mkdir [your_project_name]
> cd [your_project_name]
> npm init

# 可根據步驟填入你想要的參數
package name: (npm_demo)
version: (1.0.0) 0.0.1
description: This is my demo npm module
entry point: (index.js)
test command:
git repository: [your git repository url of npm]
keywords: demo
author: scottchayaa
license: (ISC) MIT

# 完成後就會產生 package.json

Create entry point (index.js)
接下來,我們為這個套件寫2個方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
module.exports.add = (x, y) => {
  return x + y;
}

module.exports.sum = (items) => {
  let result = 0;
  for (let i of items) {
    result += i;
  }
  return result;
}

最基本只要設定好 package.jsonindex.js 就可以發佈套件了

發佈模組

記得要先確認你本機npm是否login

1
2
npm whoami # 先確認是否login
npm login # 若無login,則執行此行

準備完後,接下來發佈套件很簡單,只要一行

1
npm publish

package.json 發佈前的注意事項

  1. name : 不可與其他公開模組的名稱重複
  2. version : 每次更新發佈時,記得版本號要手動+1,ex : 0.0.12 → 0.0.13
  3. main : require 模組起始載入的 js file name

引用剛發佈的模組

上述完成發佈後
馬上就來試試你寫的公開套件吧

1
2
# install your npm
yarn add first-npm-publish-demo 
1
2
const demo = require('first-npm-publish-demo');
console.log(demo.add(2, 3)); // 5

補充 : 使用Node Tap單元測試

install mocha, chai

1
yarn add -D tap

vi package.json

1
2
3
"scripts": {
  "test": "tap test/*.js"
},

vi test/index.js

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const tap = require('tap');
const app = require("../index");


tap.test('test add()', function (t) {
    t.plan(1);
    t.equal(app.add(1, 2), 3);
});

tap.test('test sum()', function (t) {
    t.plan(1);
    t.equal(app.sum([1, 2, 3]), 6);
});

執行測試

1
> npm test

Summary

在做專案時
你會發現有些功能你可以完全獨立出來變成模組
好讓你日後在其他專案上可以再次被輕易使用
而且這個模組日後有需要更新、修正bug或擴充功能時
新舊專案都可以一併透過更新模組得到解決
這就牽扯到是否有良好的設計模式與架構

不過簡單的觀念的話
可以試著在你專案內做以下的分類

  • 工具類模組 : 陣列處理方法, 客製運算方法, 字串處理方法, 排序方法, http工具…等
  • 第三方套件模組 : Facebook, LINE, Twitter 等常用API製作的工具
  • 特殊領域模組 : 影像處理, CLI命令, AI處理 …等

當然網路上查還是有其他的分類方法
只要不把功能全部擠在同一個模組,搞得功能四不像就好了

有時候看到前人寫的Code
你會發現那種想到什麼就加什麼進去的
都非常且非常難維護

良好的架構與設計習慣
才能讓專案穩定活下去

Reference