什麼是 npm? npm 是 Node Package Manager 的縮寫,是 Node.js 預設的 node 套件管理平台,npm 本機端的相關工具在安裝 node.js 時也會一起安裝,另一套 Package Manager 本機端工具則是 Facebook 推出的 Yarn。
套件做到的事就是別人已經研究過的東西我們可以不需要再研究一次,就像增加魅力的日常穿搭或是實用小物來說,我們其實就可以透過閱讀一些日雜來學習和應用。
小編甚至發現一些日雜還會附贈一些 C/P 值高也實用好看的小物,透過別人整理好的套件,雖然沒辦法個人和客製化,但也能夠在各方面快速達到一個水平,這就是套件的好處。
套件管理工具就像是那些雜誌或是懶人包的型錄,能快速幫我們在方方面面進入狀況,要把到妹跟專案能不能上線似乎有點類似,最重要的就是快速在各方面都能達到某些限制條件的水平。
當撰寫網頁應用程式時,會使用到其他撰寫好的套件或模組,在未使用任何 build tool 時,通常
<script src=""> 的 tag當套件或模組越來越多時,版本或相容管理複雜度就會增加,此時透過 Package Manager 指令能更方便進行套件的管理動作 (安裝、升級或刪除),接下來這篇文章將提到:
NPM 是一個 package manager,當專案什麼都沒有的時候,在安裝 Node.js 後會需要在專案根目錄輸入 npm init 來把專案初始化。
填入相關資訊後,未來所有關於套件的相關配置檔都會存在 package.json 中,安裝第一個套件後同時也會多出一個 package-lock.json 檔來保存安裝的紀錄。
會在更動 node_modules 或 package.json 的時候自動產生相關紀錄,package-lock.json 會非常詳細記錄相關套件的版本號。
目前總共有 v1 v2 v3 三個版本,v3 版後 lockfile 會藏在 node_modules/.package-lock.json
v1: 相容 npm v5 v6
v2: 相容 npm v7+ 且會向下相容 v1.
v3: 相容 npm v7+ 無法向下相容,因為會藏起來在 node_modules/.package-lock.json
用最常用的 lodash 舉例,列出幾種指令與結果說明
| 指令 | node_modules | package.json說明 | 
|---|---|---|
| npm install lodash; | 專案環境 | 僅安裝最新版本 | 
| npm install lodash -g; | 全域環境 | 僅安裝最新版本 | 
| npm install lodash@4.17.4 | 專案環境 | 僅安裝指定版本 | 
| npm install lodash --save; | 專案環境 | 安裝並加入 dependencies | 
| npm install lodash --save-dev; | 專案環境 | 安裝並加入 devDependencies | 
| npm install lodash -O; | 專案環境 | 安裝並加入 optionalDependencies | 
透過以下指令可以針對 package.json 做安裝 ,熟悉這些指令在未來我們需要控制 Docker Image 的大小、縮短 CI/CD 的時間上會有很大的幫助。
| 指令 | 說明 | 
|---|---|
| npm install | 安裝 package.json中的套件列表 | 
| npm install --no-optional; | 不安裝 optionalDependencies | 
| npm install --production | 執行環境,不安裝 devDependencies | 
npm i --package-lock-only
npm i --force
npm install --legacy-peer-deps
可以執行 npm ls + 套件名稱,舉例來說最常遇到的會是 eslint 的問題,就可以輸入 npm ls eslint,來看是在什麼地方出現衝突。
npm ci 的 ci 是 Clean install 的意思,因為 npm install 有時候會因為套件的升級等等導致安裝失敗,npm ci 會針對 package-lock.json 來還原套件,較適合是用在 CI 環境。
node_module 版號通常會有三位數字 1.2.3 對應到 主版號.次版號.修訂號,版號遞增規則如下:
安裝特定版號的方法,可以去 npm 官方提供的計算機試用看看
| 指令 | 說明 | 
|---|---|
| npm audit | 查看是否 node_modules 有相關資安漏洞 | 
| npm audit fix | 自動修正相關漏洞 | 
| npm update | 更新可更新的 node_modules | 
| npm prune | 清理 node_modules 中不需要的檔案 | 
nvm 是一套管理 node.js 版本的工具,尤其在同時須開發不同版本 node.js 專案時很好用,windows 也有提供開源的版本可以使用。
舉例來說用了這套工具升級就只要兩步驟很簡單
nvm install --lts
nvm use --lts。注意事項:
C:\Program Files\nodejs
C:\Users\<user>\AppData\Roaming\npm
| 指令 | 說明 | 
|---|---|
| nvm install 8.17.0 | 安裝特定版本 | 
| nvm use 8.17.0 | 使用特定版本 | 
如果專案大多使用不同 Node 版本,也可以在專案中加入 .nvmrc 方便使用。
在專案中新增一個 .nvmrc 然後填入版本即可執行 nvm use。
12.16.1
.node-version 是一個能被多種工具讀取的配置檔,開發者也透過其他跨平台管理工具來管理 Node 的版本。
線上發佈服務