前言
感覺最近自己進修的進度停滯了,雖然還是有照例刷題、做小專案、看udemy、丟丟履歷,不過還是想要更有系統的寫一些文章做紀錄。我就在想一個主題方便我開頭,這時候幾個想法就進了我腦海。繼續補上node的教學文章、補寫Vue的學習筆記、寫一些udemy的課程紀錄,這些都是不錯的主題,不過現階段的我可能沒有這麼多時間寫完整的學習紀錄之類的東西。
於是我想到了一個蠻常見的點子,每天一個小專案,這樣同時會給我不錯的彈性以及一些動力。至於小專案的定義我打算放寬一些,可能是一個vue component、一個靜態網頁、一個新技術或是一個簡單的套件,總之就是盡量讓自己不間斷的coding,會嘗試一些之前沒做過的東西或是一些觀念與技術的複習!想想就有些興奮呢!
打造npm套件
我們在一開始的node.js初學筆記6時就有介紹過了,有興趣的朋友可以自己回頭看一下!日常中我們很常使用別人開發的套件,像是express、lodash、chalk之類的套件都非常的實用,幫助我們自己省下了很多時間。那為何不試試看自己寫一個簡單的套件呢?其實流程並沒有想像中的複雜!一起試試看吧!
Step 1:註冊npm帳號
首先先到npm官方網站註冊一個帳號,別忘了要去註冊用的信箱認證email。
Step 2:在終端機登入帳號並建立開始檔案
接著在專案根目錄下打開終端機,並輸入以下指令。
//輸入完後會要求你依序輸入使用者名稱、密碼以及email npm login //順利的話你應該會看到以下的訊息 Logged in as username on https://registry.npmjs.org/.

接著我們需要package.json檔案去告訴別人這個套件一些詳細資訊,你可以選擇手動建立或是用touch指令,或是你直接輸入以下指令建立模板後再做修改也可以!
npm init -y
並將你的package.json修改成以下這樣。
{ "name": "@windate3411/utils", "version": "1.0.0", "description": "This package contains vary of functions I found myself used quite often while dealing with leetcode questions.", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "npm", "package", "windate3411" ], "author": "windate3411", "license": "ISC" }
注意一下,在package的json裡面的幾個重要資訊, *表示必填。
- name(*) :即將發布的套件名稱,注意我這邊名稱的開頭是@windate3411,這表示我發布時會在我的使用者名稱之下(scoped),這樣的作法可以避免套件名稱與他人上傳的重複,但同時這樣做需要再等等的發布時修改一下對應的指令。
- version(*):這個套件的版本,三個點分別是主要版本號(major)、次要版本號(minor)以及更新版本號(patch)
- description:關於這個套件的描述,並非readme.md的內容。
- keywords: 這個套件的關鍵字詞,有助於別人找到你的套件。
- license : 讓別人知道什麼樣的情況可以使用這個套件,可以參照這裡去做選擇。
Step 3:建立index.js檔案並輸出簡單的函數
由於我們剛剛在package.json中指定的主要執行檔就是index.js,所以這時候請在你的專案目錄下建立index.js檔案,裡面可以是簡單的函數,最後記得做輸出即可!
// index.js //隨便一個函數 function isPrime(num) { for (var i = 2; i <= Math.sqrt(num); i++) if (num % i === 0) return false; return num > 1; } //記得輸出 module.exports = isPrime
Step 4:建立readme.md檔案並發布
很快地就到最後一步了!在發布前記得先寫一個簡單的readme.md讓別人知道你的套件是在做什麼的!完成後輸入以下的指令,沒意外的話應該會出現錯誤。
npm publish
還記得我們剛剛在說命名時用scoped的概念可以避免與現有的套件重複嗎?如果你要採用那樣的作法,在這樣的條件下,請你將指令修改為以下,這樣就會順利發布囉!。
npm publish --access=public

結語
短短幾分鐘就可以寫一個簡單的npm套件!其實真的沒有那麼複雜,如果要專業一點的話,自然就是與github做連動、整理整個套件的結構並寫比較詳細的readme,不過做為體驗的話我覺得其實這樣就已經相當不錯了~!我自己是寫了幾個我在刷題時常用的function並整理成一個套件發布,有興趣的朋友可以幫我玩玩看:D
相關連結
套件連結:https://www.npmjs.com/package/@windate3411/utils
Github頁面:https://github.com/windate3411/utils-npm-package