npm 是什麼?(給非工程師的解釋)
// 一句話回答
npm(Node Package Manager)是 JavaScript/Node.js 的「套件管理工具」,像程式界的 App Store:全世界開發者把寫好的功能打包成「套件」放上去,你用一行 npm install 套件名 就能裝進自己的專案,不用自己從零重寫。
先認識兩個底層名詞:JavaScript 與 Node.js
要懂 npm,先認識它服務的對象。JavaScript 是一種「程式語言」——寫網頁互動效果(按鈕、動畫、表單)最常用的語言,你逛的每個網站幾乎都有它。
但 JavaScript 本來只能在「瀏覽器裡」跑。後來有人做了 Node.js,讓 JavaScript 也能在「電腦或伺服器上」直接執行——你可以把 Node.js 想成「讓 JavaScript 走出瀏覽器、在電腦上跑起來的引擎」。而 npm,就是隨 Node.js 一起來的好幫手。
用「App Store」比喻
手機想要新功能,你不會自己寫 App,而是去 App Store 下載別人做好的。寫程式也一樣。
需要某個功能(處理日期、寄 email、畫圖表),與其自己從頭刻,不如去 npm 上找一個現成的「套件(package)」裝進來。「套件」就是「別人寫好、打包好、可以直接拿來用的一組程式功能」。
不過這個比喻有個重要的落差:App Store 上的 App 有審查,npm 上的套件基本上是任何人都能上傳的。這就是後面「安全風險」那一段要講的事。
npm 是什麼
npm 全名 Node Package Manager,直譯就是「Node 的套件管理員」。它其實是兩件事合在一起:一個「超大的公開套件庫」(全世界開發者上傳分享的套件都在這),加上一個「幫你安裝與管理套件的指令工具」。
所以當人家說「用 npm 裝一個套件」,就是「透過 npm 這個工具,從那個大倉庫裡把某個現成功能抓下來裝進專案」。
你會在哪裡看到它、會遇到哪些名詞
跑工程師給你的專案、或照教學裝環境時,常會看到叫你在終端機打 npm install(終端機就是打指令的視窗,不熟的話可先看我們的 CLI 教學)。它會自動把這個專案需要的套件通通抓下來、裝好。
過程中會遇到這幾個名詞,一次講清楚:
- package.json:專案的「材料清單」,用文字記錄這個專案用到(依賴)哪些套件、各要哪個版本
- 依賴(dependency):意思是「這個專案要正常運作,得靠某些套件」——那些被靠的套件就是它的「依賴」
- node_modules:實際被裝下來的套件,全都放在這個資料夾裡(通常很大、不用手動去改它)
npm install:照 package.json 這份清單,把需要的套件一次裝齊npm run 某指令:執行專案裡預先定義好的動作(例如啟動網站、打包上線)npx:不安裝、直接執行某個套件一次。常見於「只想跑一次的建立專案指令」
版本號 1.2.3 是什麼意思
套件版本通常長得像 1.2.3,三個數字各有意思,這套規則叫「語意化版本」。看懂它,你就知道一次更新的風險有多大:
- 第一碼(主版本,1):有「不相容的重大改動」才會加。從 1 跳到 2,很可能會把原本能跑的東西弄壞,要謹慎
- 第二碼(次版本,2):新增功能,但不破壞原本的用法。相對安全
- 第三碼(修訂號,3):修 bug、修安全漏洞,不改功能。通常應該儘早更新
- 看到
^1.2.3:意思是「1 開頭的最新版都可以」。方便,但也代表不同時間安裝可能裝到不同版本 - 看到
~1.2.3:範圍更窄,只允許最後一碼更新
lock 檔是什麼?為什麼千萬別隨手刪
專案裡常有一個叫 package-lock.json 的檔案。package.json 寫的是「大概要哪個範圍的版本」,而 lock 檔記錄的是「這次實際裝下來的,是每個套件的哪一個確切版本」。
它的價值是讓每個人、每台機器、每次部署裝到的東西完全一致。少了它,你電腦上跑得好好的專案,到同事電腦或正式主機上可能就壞了——因為裝到了不同版本。
所以看到有人說「刪掉 lock 檔重裝試試」,那是一種除錯手段,不是日常操作。這個檔案應該跟程式碼一起保存與版本控管,不要當成暫存檔刪掉。
安全:裝套件其實有風險
這是企業最該知道、卻最常被忽略的一段。你裝一個套件,等於是把「別人寫的程式碼」放進自己的專案裡跑。常見的三種風險:
- 供應鏈攻擊:某個熱門套件的維護者帳號被入侵,攻擊者發布一個含惡意程式的新版本。所有自動更新到那一版的專案都會中招。這是近年真實且反覆發生的攻擊手法
- 名稱誤植(typosquatting):攻擊者故意上傳一個名字跟熱門套件只差一兩個字母的惡意套件,等人打錯字裝到。安裝前務必核對名稱一個字都不能錯
- 廢棄與漏洞:套件作者不再維護,已知漏洞沒人修。專案越久,這種「無人看管的依賴」會越積越多
非工程師也做得到的三個防護動作
- 要求定期跑安全檢查:npm 內建
npm audit可以列出已知漏洞。請工程師把它排進固定流程,並且把結果給你看 - 不要隨便叫 AI 或外包「裝一個套件解決」:每多一個依賴就多一份風險。先問「不裝行不行」
- 鎖住版本、有計畫地更新:保留 lock 檔,更新排成固定節奏(例如每月一次)並測試過再上線,而不是放任自動更新
一鍵複製:看不懂 npm 錯誤訊息時
安裝套件出錯是家常便飯,訊息又長又難懂。把錯誤整包貼給 AI,用這段提示詞請它翻譯成人話並給出安全的處理步驟。
我不是工程師。我在安裝專案套件時遇到錯誤,請幫我看懂並處理。 請依序回答: 一、用白話說明這個錯誤到底在講什麼(不要用術語,需要用到的名詞請就地解釋) 二、最可能的原因是什麼?如果有多個可能,請按「最可能」排序 三、給我具體的處理步驟,每一步都寫出「要打什麼指令」和「打完應該看到什麼」 四、這些步驟裡,有沒有哪一步會「刪除檔案」或「改動我的專案」?如果有,請明確標示出來並提醒我先備份 五、如果這件事其實需要工程師處理,請直接告訴我,並幫我整理一段可以直接轉貼給工程師的說明 補充資訊: - 我的作業系統:(Windows/macOS/不確定) - 我是照哪份教學做的:(貼連結或說明,沒有就寫「沒有」) 【錯誤訊息開始】 (把終端機裡的錯誤訊息整段貼在這裡,不要只貼最後一行) 【錯誤訊息結束】
對非工程師的意義
你不用會用 npm 開發,但知道它是什麼,能讓你:看懂技術教學的安裝步驟、順利跑起別人給你的專案、跟工程師溝通時不卡在名詞。
更實際的一點是成本與風險判斷:當工程師說「這個功能有現成套件,兩天就能做完」,你會知道那是合理的做法;而當一個專案的依賴越堆越多,你也會知道該問「這些都還有人維護嗎」。
常見問題
npm 跟 Node.js 是一樣的嗎?
不一樣,但綁在一起。Node.js 是「讓 JavaScript 在電腦上執行的引擎」,npm 是「隨 Node.js 一起安裝、用來管理套件的工具」——裝了 Node.js 通常就有 npm。
npm 要付費嗎?
公開套件與基本使用是免費的。npm 也有付費的私有套件、企業方案(給公司放不對外公開的內部套件),但一般使用免費的就足夠。
為什麼 node_modules 資料夾那麼大?
因為你裝的套件常常又「依賴」一堆別的套件(它自己也要靠別人才能運作),層層累積下來檔案就很多。這是正常現象,通常不需要手動去動它。
一定要會打指令(CLI)才能用 npm 嗎?
npm 主要透過終端機下指令使用(例如 npm install),所以會碰到一點命令列。但多半是照教學複製貼上,不需要會寫程式。
npm、yarn、pnpm 有什麼不同?我該用哪個?
三個都是做同一件事的套件管理工具,差別主要在速度與磁碟使用效率。重點是一個專案只用一種、全隊統一,混用會造成版本不一致。既有專案裡工程師用哪個,你就跟著哪個。
AI 幫我寫的程式叫我裝套件,安全嗎?
要自己確認。AI 可能推薦已經廢棄的套件,也可能把名稱記錯(就變成前面說的名稱誤植風險)。安裝前先到 npm 官方頁面核對:名稱是否完全一致、最近有沒有在維護、每週下載量是否合理。