從頭寫一個npm package吧!(30Days challenge-1)

前言

感覺最近自己進修的進度停滯了,雖然還是有照例刷題、做小專案、看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

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s