iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

學習NodeJS的30天系列 第 15

Day15 NodeJS-NPM II

  • 分享至 

  • xImage
  •  

經過昨天的簡介,今天要來講NPM相對重要的部份:安裝套件與管理,分成一般相依性安裝、開發相依性安裝、全域安裝三個部份。

在提相依性安裝之前,先說明一下其實NPM套件的安裝也可以是不紀錄相依性的安裝,只要在專案資料夾路徑透過終端機指令npm install <package name>就可以完成最基本的安裝,但透過相依性安裝可以將安裝的套件及版本資訊記錄在package.json,除了可以設定版本的自動更新外,也可以在專案搬遷時,更容易還原安裝套件。

一般相依性安裝

  1. NPM套件安裝時,加入--save會將套件程式碼存到專案路徑下的node_modules資料夾,這邊以ramda套件為例。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980ndnHVZ5EDw.png

https://ithelp.ithome.com.tw/upload/images/20210930/20139980hbSXDFOTu5.png

  1. 同時ramda套件的版本也會被記錄到package.json檔案的dependencies,表示專案中的程式與ramda套件有相依性,執行環境中也需要有ramda套件,記錄的方式是"<套件名稱>": "<套件版本>",若在套件版本前加入^符號,表示在還原套件時自動安裝最新的次版本或是修訂版本,加入~符號的話僅會查詢安裝最新的修訂版本。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980mc026IAqSo.png

  1. 安裝後的套件模組可以用require引入,當require參數不具路徑前贅字./的時候,會先查找NodeJS內建的模組,然後是package_module裡安裝的模組。
const R = require("ramda");
  1. 以之前練習的server.js引入ramda模組後做測試,順利的取用其中的方法。
let http = require("http");
let fs = require("fs");
const R = require("ramda");

let a = R.concat("Chw", "K");
http.createServer(function(req,res){
  let obj = {
    firstName: "Chw",
    lastName: "K",
    fullName: a
  };
  res.writeHead(200, {"contentType": "application/json"});
  res.end(JSON.stringify(obj));
}).listen(1324,"127.0.0.1");

https://ithelp.ithome.com.tw/upload/images/20210930/20139980n8FiRTwiiu.png

開發相依性安裝

  1. 開發相依性安裝是透過--save-dev選項進行安裝,一樣會將套件程式碼下載並儲存。

https://ithelp.ithome.com.tw/upload/images/20210930/201399802gcVpGcXch.png

  1. 在package.json中會將套件版本資訊紀錄在devDependencies之下,以表示此套件是在專案開發時使用,在僅需執行此專案的情況下不需要重建此套件。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980eQUThj4OjP.png

全域安裝

  1. 全域安裝通常用在經常性使用的套件,在npm install中加入-g,可以將套件進行全域安裝,OS環境中的全域安裝需以sudo身份進行。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980T8NP9cpfiD.png

  1. 這裡用的範例套件是nodemon,用於自動reload修改的程式,是直接透過終端機執行的套件,啟動後在每次程式碼修改後都會自動重新執行程式碼。

https://ithelp.ithome.com.tw/upload/images/20210930/20139980OF16Eh0ill.png

小結

NPM的套件真的非常便利且包羅萬象,但還是需要花點心思了解,由於每個套件可能也有相依的套件,如果一昧的安裝使用,可能會導致專案佔滿記憶體空間,而有些沒有紀錄在package.json的安裝套件,例如透過全域安裝下載的套件,管理上會比較沒有這麼方便,也是需要多注意,NPM的部份就先告一段落,接下來是實際運用了。

參考資料

https://ramdajs.com/docs/

https://nodemon.io

https://www.npmjs.com

Learn and Understand NodeJS [課程]


上一篇
Day14 NodeJS-NPM I
下一篇
Day16 NodeJS-Express I
系列文
學習NodeJS的30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言