[筆記] 模組、套件與 npm
模組化
- require 用別人的模組
將不同功能切開,分別寫在不同檔案裡。
列如 node 就有提供很多寫好的模組,如:os、readline、fs、https……等等。
引入方法,使用require
關鍵字:var os = require('os') // 引入模組並存入 os 這個變數中
console.log(os.platform()) - exports 建立自已的模組
建立自已的模組讓別人/或自已可以使用,使用module.exports
關鍵字然後想要在同一個資料夾裡的另一個程式裡使用的話一樣是用 require,但是引入的必需是檔案名稱,而不是函數名稱:// 檔名為 abcde
function abc(x) {
return x
}
module.exports = abcvar 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 初始會被視為空物件 |
引入時可以作為方法使用:
var utils = require('./utils') |
npm 大神們寫的模組/套件
library、package、module 三個相近的概念,有時候其實指的也是同一個東西。
- 拿 left-pad 來試試安裝 left-pad(其實就是在同一個資料夾建立一個
npm install 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
事件看了一個多小時,網路真的很恐怖,連出去就抓不回來了……)
npm scripts
在package.json
檔案裡可以看到:"scripts":{}
這個區塊,就是讓你寫 scripts 的地方啦!
這個 json 物件裡的 key 就是你想要在這個 node 專案裡設定的一個指令,value 就是下了這個指令後會執行的步驟。例如:設定"start": "node index.js"
那麼在這個專案資料夾裡執行npm run start
(必需要加npm run
在指令之前)的時候,npm 就會自動執行node index.js
這個指令。還有 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這裡可以看完整對照表