今天要來講 NPM 與套件管理
Node.js 專案需要別人寫好的功能 → 用 npm 安裝套件 → 記錄在 package.json → 實際程式透過 require() 使用
1.看懂 package.json
它可以理解成 Node.js 專案的「說明書+套件清單」
常見會看到:
{
"name": "upload-api",
"version": "1.0.0",
"scripts": {
"start": "node server.js",
"test": "node test.js"
},
"dependencies": {
"dotenv": "^17.0.0",
"formidable": "^3.5.0"
}
}
所以執行 npm start
其實就是去找:"start": "node server.js"
2.知道 node_modules 怎麼被 require 找到
假設寫:const formidable = require('formidable');
Node 看到沒有寫:require('./formidable');
它就知道你不是要找自己專案裡的檔案,而是要找「套件」。
概念上會往 node_modules 資料夾去找。
目前資料夾
↓
node_modules/formidable
所以:
package.json
↓ npm install
node_modules
↓
require('formidable')
3.理解 package-lock.json
假設:"formidable": "^3.5.0"
^3.5.0 不一定代表大家最後都裝到完全一樣的細版本。
所以 npm 會產生:package-lock.json
記住這次實際安裝了哪些版本。
可以先記成:
package.json
= 我想要什麼
package-lock.json
= 我實際裝了什麼
因此一般專案裡 node_modules 是不會被 commit 上去的(工程師最基礎的認知)
然後下載專案在透過 npm install 的方式把套件安裝回來哩
package.json ✅ commit
package-lock.json ✅ commit
node_modules ❌ 不 commit
4.用 dotenv 讀環境變數
有些東西不希望直接寫死:
const uploadDir = './uploads';
const maxSize = 10;
這樣就可以放在 .env
例如:
// .env
UPLOAD_DIR=./uploads
MAX_FILE_SIZE_MB=10
然後直接做引入使用
require('dotenv').config();
console.log(process.env.UPLOAD_DIR);
console.log(process.env.MAX_FILE_SIZE_MB);
心智模型:
.env
↓
dotenv
↓
process.env
↓
Node.js 程式使用