文章目錄
- npm命令全解析
- 簡介
- 基礎命令
- 安裝npm(npm -v檢插版本)
- 初始化項目(npm init)
- 安裝依賴包(npm install xxx、npm i xxx)
- 卸載依賴包(npm uninstall xxx 或 npm uni xxx、npm remove xxx)
- 列出已安裝的包(npm list)
- 依賴管理精解
- 依賴類型區分(生產環境依賴dependencies、開發環境依賴devDependencies、宿主環境依賴peerDependencies、可選依賴optionalDependencies)
- 版本控制策略
- 依賴更新
- 檢查過時的包(npm outdated)
- 更新特定包(npm update lodash)
- 更新所有包(npm update)
- 腳本與自動化
- 自定義腳本
- 鉤子腳本(prebuild、postbuild編譯前后打印)
- 發布與共享
- 創建可發布包
- 注冊npm賬號(npm adduser)
- 發布包(npm publish)
- 發布特定標簽版本(`npm publish --tag beta`)
- 包版本管理
- 補丁版本號+1 (1.0.0 -> 1.0.1)(npm version patch)
- 次版本號+1 (1.0.0 -> 1.1.0)(npm version minor)
- 主版本號+1 (1.0.0 -> 2.0.0)(npm version major)
- 高級技巧
- npm緩存操作
- 清除緩存(`npm cache clean --force`)
- 驗證緩存(npm cache verify)
- 包信息查詢
- 查看包信息(npm info lodash)
- 搜索包(npm search keyword)
- 安全審計
- 檢查安全漏洞(npm audit)
- 自動修復問題(npm audit fix)
- 僅修復開發依賴(`npm audit fix --only=dev`)
- 私有注冊表配置
- 設置私有注冊表(npm config set registry https://registry.company.com/)
- 恢復默認注冊表(npm config set registry https://registry.npmjs.org/)
- 全局包管理
- 全局安裝包(npm install -g package)
- 全局卸載包(npm uninstall -g package)
- 查看全局安裝位置(npm root -g)
- 高效工作流
- 交互式更新依賴
- 交互式選擇更新的依賴(`npx npm-check -u`)
- 并行運行腳本(npm-run-all)
- 依賴可視化
- 安裝依賴可視化工具(`npm install -g npmgraph`)
- 生成依賴圖(`npmgraph <package-name>`)
- 本地包開發與鏈接(npm link)
- 定義
- 命令
- 最佳實踐
- 鎖定依賴版本
- 生成或更新package-lock.json(npm ci)
- package-lock.json示例
- 精簡安裝策略
- 僅安裝生產依賴(`npm install --production`)
- 使用ci命令精確還原依賴(npm ci)
- 環境檢查與診斷(npm doctor)
npm命令全解析
簡介
npm (Node Package Manager) 是JavaScript運行時環境Node.js的默認包管理工具,為開發者提供了一種高效管理項目依賴的方式。作為世界上最大的軟件注冊表,npm包含了超過100萬個開源包,極大地促進了JavaScript生態系統的繁榮發展。
基礎命令
安裝npm(npm -v檢插版本)
npm隨Node.js一起安裝,可通過以下命令檢查版本:
npm -v
初始化項目(npm init)
創建新項目時,首先需要初始化package.json文件:
npm init
# 或使用默認值快速創建
npm init -y
安裝依賴包(npm install xxx、npm i xxx)
# 安裝包并保存到dependencies
npm install lodash
# 簡寫形式
npm i lodash# 安裝指定版本
npm install lodash@4.17.21# 安裝開發依賴
npm install webpack --save-dev
# 或簡寫
npm i webpack -D
關于開發依賴,參考文章:npm開發依賴(僅在開發階段需要,生產環境不需要的包)(npm install xxx --save-dev、npm i xxx -D、npm install --production)
卸載依賴包(npm uninstall xxx 或 npm uni xxx、npm remove xxx)
# 卸載包并從dependencies中移除
npm uninstall lodash
# 簡寫形式
npm rm lodash
# 或
npm remove lodash# 卸載開發依賴
npm uninstall webpack --save-dev
# 或簡寫
npm rm webpack -D
列出已安裝的包(npm list)
# 列出所有已安裝的包
npm list# 只顯示頂層依賴
npm list --depth=0# 查看特定包
npm list lodash
依賴管理精解
依賴類型區分(生產環境依賴dependencies、開發環境依賴devDependencies、宿主環境依賴peerDependencies、可選依賴optionalDependencies)
{"dependencies": {"react": "^17.0.2" // 生產環境依賴},"devDependencies": {"webpack": "^5.52.0" // 開發環境依賴},"peerDependencies": {"react": ">=16.8.0" // 宿主環境依賴},"optionalDependencies": {"fsevents": "^2.3.2" // 可選依賴,安裝失敗不會導致npm install失敗}
}
版本控制策略
"lodash": "^4.17.21" // ^表示兼容補丁和小版本更新
"express": "~4.17.1" // ~表示兼容補丁版本更新
"moment": "4.17.1" // 精確版本
"webpack": ">=5.0.0" // 大于等于指定版本
依賴更新
檢查過時的包(npm outdated)
npm outdated
更新特定包(npm update lodash)
npm update lodash
更新所有包(npm update)
npm update
腳本與自動化
自定義腳本
package.json中定義常用操作:
{"scripts": {"start": "node server.js", // 啟動應用"dev": "nodemon server.js", // 開發模式"build": "webpack --mode production", // 構建生產版本"test": "jest", // 運行測試"lint": "eslint ." // 代碼檢查}
}
運行腳本:
npm run dev
# start、test、stop、restart可以省略run
npm test
鉤子腳本(prebuild、postbuild編譯前后打印)
{"scripts": {"prebuild": "echo '構建前執行'", // build前自動執行"build": "webpack","postbuild": "echo '構建后執行'" // build后自動執行}
}
發布與共享
創建可發布包
注冊npm賬號(npm adduser)
發布包(npm publish)
發布特定標簽版本(npm publish --tag beta
)
包版本管理
補丁版本號+1 (1.0.0 -> 1.0.1)(npm version patch)
次版本號+1 (1.0.0 -> 1.1.0)(npm version minor)
主版本號+1 (1.0.0 -> 2.0.0)(npm version major)
高級技巧
npm緩存操作
清除緩存(npm cache clean --force
)
驗證緩存(npm cache verify)
包信息查詢
查看包信息(npm info lodash)
npm info lodash
# 查看特定版本信息
npm info lodash versions
搜索包(npm search keyword)
npm search react-component
安全審計
檢查安全漏洞(npm audit)
自動修復問題(npm audit fix)
僅修復開發依賴(npm audit fix --only=dev
)
私有注冊表配置
設置私有注冊表(npm config set registry https://registry.company.com/)
恢復默認注冊表(npm config set registry https://registry.npmjs.org/)
全局包管理
全局安裝包(npm install -g package)
# 全局安裝包
npm install -g typescript
# 或簡寫
npm i -g typescript
全局卸載包(npm uninstall -g package)
npm uninstall -g typescript
查看全局安裝位置(npm root -g)
npm root -g
高效工作流
交互式更新依賴
交互式選擇更新的依賴(npx npm-check -u
)
并行運行腳本(npm-run-all)
使用npm-run-all包簡化多腳本運行:
{"scripts": {"lint:js": "eslint .", // JS代碼檢查"lint:css": "stylelint '**/*.css'", // CSS代碼檢查"lint": "npm-run-all --parallel lint:*", // 并行運行所有lint腳本"dev:server": "nodemon server.js", // 后端開發服務"dev:client": "webpack serve", // 前端開發服務"dev": "npm-run-all --parallel dev:*" // 并行運行所有dev腳本}
}
依賴可視化
安裝依賴可視化工具(npm install -g npmgraph
)
生成依賴圖(npmgraph <package-name>
)
本地包開發與鏈接(npm link)
定義
npm link 是用于本地包開發和測試的強大工具,主要解決以下問題:
-
開發階段測試:當你開發自己的 npm 包時,可以通過 npm link 在不發布到 npm 倉庫的情況下,在其他項目中測試這個包
-
工作原理:
- 在包目錄執行
npm link
會在全局 node_modules 創建一個符號鏈接 - 在使用該包的項目中執行
npm link package-name
創建指向全局鏈接的本地鏈接
- 在包目錄執行
-
實際使用場景:
- 同時開發多個相互依賴的包
- 修改第三方庫并在本地測試
- 團隊協作時共享尚未發布的包
-
優勢:對本地包的任何修改都會立即反映在使用它的項目中,無需重新安裝,大大提高了開發效率
解除鏈接可以使用 npm unlink package-name
或 npm uninstall package-name
命令。
命令
# 在本地包目錄中執行,創建全局鏈接
npm link# 在需要使用本地包的項目中執行
npm link package-name
最佳實踐
鎖定依賴版本
生成或更新package-lock.json(npm ci)
package-lock.json示例
{"name": "project-name","lockfileVersion": 2,"requires": true,"packages": {"node_modules/lodash": {"version": "4.17.21","resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz","integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="}}
}
精簡安裝策略
僅安裝生產依賴(npm install --production
)
使用ci命令精確還原依賴(npm ci)
環境檢查與診斷(npm doctor)
npm doctor
通過本文全面掌握npm命令,能夠顯著提升JavaScript項目開發效率和質量。從基礎命令到高級技巧,npm為現代JavaScript開發提供了強大而靈活的工具鏈支持。