jas0nhuang

[筆記] 模組、套件與 npm

模組化

  • require 用別人的模組
    將不同功能切開,分別寫在不同檔案裡。
    列如 node 就有提供很多寫好的模組,如:os、readline、fs、https……等等。
    引入方法,使用 require 關鍵字:
    var os = require('os') // 引入模組並存入 os 這個變數中
    console.log(os.platform())
  • exports 建立自已的模組
    建立自已的模組讓別人/或自已可以使用,使用 module.exports 關鍵字
    // 檔名為 abcde
    function abc(x) {
    return x
    }
    module.exports = abc
    然後想要在同一個資料夾裡的另一個程式裡使用的話一樣是用 require,但是引入的必需是檔案名稱,而不是函數名稱:
    var abc = require('./abcde')
    console.log(abc('hello'))
  • 輸出多個模組
    同一個檔案可以輸出多個模組,但是必需以單一物件 export(不然只會輸出最後一個模組),例如:
    // 檔名為 utils.js
    function double (x) {
    return x * 2
    }
    function triple (y) {
    return y * 3
    }
    module.exports = {
    double: double,
    triple: triple
    }

或者也可以寫成:

// exports 初始會被視為空物件
exports.double = double
exports triple = triple

引入時可以作為方法使用:

var utils = require('./utils')
utils.double(22)
utils.triple(33)

npm 大神們寫的模組/套件

library、package、module 三個相近的概念,有時候其實指的也是同一個東西。

  1. 拿 left-pad 來試試
    npm install left-pad
    安裝 left-pad(其實就是在同一個資料夾建立一個 node_modules/ 資料夾,然後從 npm 的程式庫裡把 left-pad 這個套件抓下來,放到 node_modules/ 資料夾內)
    然後就可以 var LP = require('left-pad') 使用它了。
  • 如果還沒有執行過,npm init 的話,因為資料夾內還沒有 package.json 檔案,所以這時候安裝的套件都不會被記錄到相依性裡頭。
  • 但是只要一執行 npm init(不論是安裝套件之前還是之後),npm 預設都會把安裝的套件記錄到相依性裡(–save)。
    這個相依關係有一個很實用的地方就是大家在分享自已的專案時不用分享 node_modules 資料夾內的套件,只要有 package.json 檔,在任何電腦上執行 npm install npm 就會自動把相依的套件都抓下來了。
  • --save 選項是記錄到相依套件,--save-dev 則會記錄到「開發環境」的相依關係裡。
    (看 left-pad 事件看了一個多小時,網路真的很恐怖,連出去就抓不回來了……)
  1. npm scripts
    package.json 檔案裡可以看到:"scripts":{} 這個區塊,就是讓你寫 scripts 的地方啦!
    這個 json 物件裡的 key 就是你想要在這個 node 專案裡設定的一個指令,value 就是下了這個指令後會執行的步驟。例如:設定 "start": "node index.js" 那麼在這個專案資料夾裡執行 npm run start(必需要加 npm run 在指令之前)的時候,npm 就會自動執行 node index.js 這個指令。

  2. 還有 yarn
    其實就是另一個管理套件的程式,跟 npm 不止 87 分像,基本指令對照 npm:

    yarn -v == npm -v
    yarn == npm install
    yarn add PACKAGE == npm install PACKAGE
    yarn add --dev PACKAGE == npm install --save-dev PACKAGE
    yarn run start == npm run start

    這裡可以看完整對照表