# 什麼是 NPM ?
npm(全稱 Node Package Manager,即「node包管理器」)是Node.js預設的、用JavaScript編寫的軟體套件管理系統。
## 功能說明
+ npm模組倉庫提供了一個名為「registry」的查詢服務,用戶可通過原生的npm命令下載並安裝指定模組。
+ 用戶也可以通過npm把自己設計的模組分發到registry上面。
+ 註:npm會隨著Node.js自動安裝。
## NPM 常用指令
+ `npm -v`:觀看 NPM 版本
+ `npm init`:新增 package.json
+ `npm install [模組名稱]`:安裝 NPM 模組
+ `npm install [模組名稱] -g`:全域安裝
+ `npm list`:顯示安裝的 NPM 列表
+ `npm uninstall [模組名稱]`:刪除專案裡的 NPM
## `npm install` 的妙用
通常 node_modules 資料夾不會被加入版本控制裡面 (.gitignore),所以可用 `npm install` 指令將裡面的模組一一安裝回來。
+ 又或者 node_modules 資料夾被刪除或遺失的時候。
+ 註:最一開始須先使用 `npm init` 新增一個 package.json 檔案。
---
## NPM scripts
``` json
//in package.json
{
"name": "fortesting",
"version": "1.0.0",
"description": "",
"main": "JSpractice.js",
"scripts": {
"start": "node JSpractice",
"tryEcho": "echo 123",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"left-pad": "^1.3.0"
}
}
```
+ 每次要執行 JSpractice 這個檔案的時候,都是從終端機輸入:`node JSpractice` 指令,而透過 NPM scripts 可以自己設計腳本來使用。
+ 用法:
+ 使用 npm run [script name] 指令。
+ 這邊的範例是使用 `npm run start` 來達成跟 `node JSpractice` 一樣的效果。
+ 範例二:使用 `npm run tryEcho` 等於在終端機輸入 `echo 123`。
---
## NPM 版本號
打開 package.json 裡面的內容如下:
```
//...
"dendencies": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "^1.19.0",
// ...
}
```
以 `"accepts": "~1.3.7",` 這行為例:
+ 1 代表主要版本號
+ 3 代表次要版本號
+ 7 代表修訂號 (bug)
+ `~` 波浪符號代表指定安裝為不超過**次要**版本號的版本 (指定為 >= 1.3.7 且 < 1.4.0 的版本)
以 `"body-parser": "^1.19.0",` 這行為例:
+ 1 代表主要版本號
+ 19 代表次要版本號
+ 0 代表修訂號 (bug)
+ `^` 符號代表指定安裝為不超過**主要**版本號的版本 (指定為 >= 1.19.0 且 < 2.0.0 的版本)
> 參考資料:[npm 維基百科](https://zh.wikipedia.org/wiki/Npm) & [NPM是什麼?了解Node Package Manager套件管理機制](https://tw.alphacamp.co/blog/npm-node-package-manager)