Node.js 基礎 - 包管理器 Npm 使用講解
包管理器又稱軟件包管理系統,它是在電腦中自動安裝、配制、卸載和升級軟件包的工具組合,在各種系統軟件和應用軟件的安裝管理中均有廣泛應用。對于我們業務開發也很受益,相同的東西不必重復去造輪子。
每個工具或者開發語言都有相應的包管理器,好比 Ubuntu 的 apt-get、Centos 的 yum、Java 的 Maven 倉庫等等。Node.js 中目前最出名的包管理器為 NPM 也是生態最好的。
什么是 NPM?
NPM 是 Node.js 中的包管理器。允許我們為 Node.js 安裝各種模塊,這個包管理器為我們提供了安裝、刪除等其它命令來管理模塊。這里有一點我們需要注意,我們必須要有一個 package.json 文件或 node_modules 目錄安裝模塊到本地。
執行命令 npm i module -S/D 安裝模塊后,會在本地存儲我們所安裝的依賴項,存在于 package.json 的 dependencies/devDependencies 對象里。例如,如果一個模塊 X 使用了模塊 A 版本為 1.0,模塊 Y 使用了模塊 A 版本為 1.5,那么模塊 X 或 Y 都將在本地擁有自己對應的模塊 A 的副本。
- // 模塊 X
- {
- "name": "X",
- "dependencies": {
- "A": "^1.0"
- }
- }
- // 模塊 Y
- {
- "name": "Y",
- "dependencies": {
- "A": "^1.5"
- }
- }
什么時候需要 NPM 包?
當我們在開發一些 Node.js 項目時,可能會遇到一些地方需要 NPM,例如鏈接 Redis、MongoDB 或者發送請求 Request 等,有了這些現有模塊可以使我們更專注于業務開發,當然有時你會有些特別的需求,這時可能需要自己去封裝一個 NPM 模塊,實現模塊復用、資源共享。
NPM 安裝
NPM 不需要單獨安裝,在我們安裝 Node.js 環境時,NPM 也就安裝了,Node.js 環境還沒搭建的同學可參考 “3N 兄弟” 助您完成 Node.js 環境搭建 一節。
終端執行 npm -v 命令查看當前 npm 版本
- $ npm -v
- 5.6.0
NPM 源設置
在國內有時候受限于網絡因素的影響,通常在安裝一個包管理器之前可以切換為 淘寶 NPM 鏡像,加速安裝速度,但是要注意如果是私有模塊在 NPM 官方的,則必須切換為官方源,否則會出現 404 錯誤。
查看當前 npm 源
- npm config get registry
- # http://registry.npmjs.org/
切換為 taobao 源
- npm config set registry=https://registry.npmmirror.com
切換為 npm 官方源
在 npm publish 的時候 需要切換回 npm 源
- npm config set registry=http://registry.npmjs.org
如果不想全局設置,執行 npm 命令時也可通過參數傳遞鏡像地址 npm i module --registry=https://registry.npmmirror.com。
淘寶 NPM 鏡像啟用新域名
注意:淘寶 NPM 鏡像已啟用新域名,由原先的 http://registry.npm.taobao.org 改為了 https://registry.npmmirror.com,目前對老的 NPM 鏡像地址做了 301 跳轉,但老的 http://npm.taobao.org 和 http://registry.npm.taobao.org 域名將于 2022 年 05 月 31 日零時起停止服務,如果使用老域名的開發者可以開始替換了。
**參考 **https://zhuanlan.zhihu.com/p/430580607
如何在項目中應用
讓我們新建一個項目 test,剛開始這是一個空的文件夾
第一步
控制臺執行 npm init,根據提示輸入信息,會生成一個 package.json 文件,如下所示:
- {
- "name": "test", // 項目名稱
- "version": "1.0.0", // 版本號
- "description": "", // 描述
- "main": "index.js", // 入口文件,默認 index.js
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "May", // 作者
- "license": "ISC"
- }
第二步
安裝 npm 模塊,例如我們安裝一個 moment 模塊,執行以下命令。
- npm install moment -S
- # or
- npm i moment --save
安裝成功之后,會生成一個新的目錄 node_modules 這是用來存放我們所安裝的模塊,另外 package.json 也會發生變化多了一個 dependencies 對象,這個是用來存儲我們的模塊版本信息。
- "dependencies": {
- "moment": "^2.24.0"
- }
看下我們當前的目錄結構:
NPM 注冊登錄
注冊
- $ npm adduser
- Username: your name
- Password: your password
- Email: (this IS public) your email
查看當前使用的用戶
- npm whoami
npm 登錄
- npm login
私有模塊
如果是公司團隊或者個人項目的私有 npm 包,進行發布的時候要注意下啦,模塊的名字要以@符號開始、/符號結束,中間部分為私有包的組織名。例如,@may/logger,may 為組織的名稱,logger 為包名。
package.json
- {
- "name": "@may/logger"
- }
發布 NPM 模塊
進入項目根目錄,輸入命令。
- npm publish
常見問題
Questions1
- no_perms Private mode enable, only admin can publish this module: coorddistance
這里注意的是因為國內網絡問題,許多小伙伴把 npm 的鏡像代理到淘寶或者別的地方了,這里要設置回原來的鏡像。
- npm config set registry=http://registry.npmjs.org
Questions2
Unexpected end of input at 1:3637 npm ERR! egistry.npmjs.org/mkdirp/-/mkdirp-0.3.2.tgz"},"engines":{"node":"*"}
執行命令 npm cache clean --force
Questions3
Node項目部署 私有包報錯404 一般兩種情況造成:
- 檢查服務器是否登錄npm賬號
- 執行命令npm config get registry 檢查是否指向https,沒有指向https執行命令 npm config set registry=https://registry.npmjs.org