# NPM ###### tags: `nodejs`, `NPM` NPM (Node Package Manager),是 Node.js 預設的 node 套件管理工具,在本機端安裝 Node.js 時也會一併安裝。 - 套件:我們不需要重新開發就能使用別人已經開發好的程式碼 - 套件管理工具:當使用到到的套件愈來愈多,並且版本與相容性的管理愈來愈複雜時,就需要一個類似目錄的東西,來讓我們統一管理套件(安裝、升級、刪除) ## Install 初始化專案: ```bash npm init ``` 輸入相關資訊後會新增一個 `package.json` 檔案,來保存所有關於套件的相關配置檔資訊。安裝第一個套件後會再多出一個 `package-lock.json` 檔案來保存安裝紀錄。 依照各個不同的環境,套件有可能會被安裝在: - dependencies: 執行環境 - devDependencies:開發或測試環境 - optionalDependencies:不一定在每個環境都能安裝 ## Install npm package/node module Install npm package/node module: Example: [Express](/J5dkb9EsRuWhJSvnEPe1yQ) ```shell $npm install express --save ``` Import *express* from *nodemodules*: ```javascript const express = require('express'); ``` ## node module 版本號 在 *<package.json>* 檔案中可以查看到套件的版本號。 node_module 版號通常會有三位數字 `1.2.3` 對應到 `主版號.次版號.修訂號`,[版號遞增規則如下](https://semver.org/lang/zh-TW/): - 主版號:當你做了不相容的 API 修改 - 次版號:當你做了向下相容的功能性新增 - 修訂號:當你做了向下相容的問題修正 - 先行版號及版本編譯資訊: 加到「主版號.次版號.修訂號」的後面,作為延伸 ```json { "dependencies":{ "nodemon":"^1.12.0" } } ``` - `^` - 安裝 1.x.x ,保留主要版本 - `~` - 安裝 1.12.x,只安裝 bug 的修正 - `latest` - 最新 ## `npm install` 安裝 node modules 因為套件的檔案很大,在上傳程式碼時通常不會將 node_modules 上傳( 會使用 `.gitignore`)。 如果要下載其他人的專案,或是不小心把 node_modules 檔案夾刪除,就需要透過 `npm install` 來安裝在 `package.json` 中提到的 packages。 ## npm install: --save、--save-dev、-g 差異 - `--save` - 安裝 node module 並寫入 package.json 的 "dependencies" - 適合:node 應用程式上線後會用到的 npm - `--save-dev` - 安裝 node module 並寫入 package.json 的 "devDependencies" - 適合:只是在開發過程會用到的工具,不影響上線要用到的(例如:jshint, mocha) - package.json: ```json { "devDependencies":{ "nodemon":"^1.12.0" } } ``` - `-g` 全域安裝(package.json 中無資料,但仍然可以執行) - file path(mac): `/usr/local/lib/node_modules` ## npm 常用指令 * `npm -v` :觀看 NPM 版本 * `npm init` :新增 package.json * `npm install [模組名稱][安裝位置] `:安裝 NPM 模組,安裝位置常用屬性如下: * `-g` 全域安裝 * `--save` 安裝模組並寫入 package.json 的 "dependencies" * `--save-dev` 安裝模組並寫入 package.json 的 "devDependencies" * `npm list` :顯示安裝的 NPM 列表 * `npm uninstall [模組名稱]` :刪除專案裡的 NPM ## npm 常用 packages - nodemon - [express](https://www.npmjs.com/package/express) - [UUID](https://www.npmjs.com/package/uuid) :隨機產生 UUID