什么是npm
npm是nodejs的包管理器,在當今工程化前端開發過程中,npm包起着舉足輕重的作用。
安裝npm
作為nodejs的包管理器,npm隨着nodejs一起安裝的。通常情況下,當我們安裝完成nodejs以后,npm也就隨之安裝了。
如果要更新npm,可以使用如下命令:
npm install npm -g
npm鏡像
npm提供了官方的鏡像管理倉庫: 官方倉庫,如果我們要使用某個庫文件,可以在這個網站上面進行查找,然后使用npm進行安裝。
由於國內的網絡環境,通常我們會設置淘寶的鏡像,設置方法:
npm config set registry https://registry.npm.taobao.org
要查看設置了哪些參數,使用命令:
npm config ls
從中可以看到配置文件的地址:C:\Users\Administrator\.npmrc
使用npm安裝包
初始化配置文件
在使用npm之前,要先初始化npm的配置文件,使用如下命令:
npm init
這個時候會出現一個初始化的引導命令行,讓你輸入項目名稱、版本號、作者、協議等,如果你覺得這些輸入起來麻煩,可以添加參數來使用默認值:
npm init --yes
使用以上命令,會在當前目錄生成package.json。下面是這個默認配置文件的注釋:
{
"name": "demo1", //名稱
"version": "1.0.0", //版本號
"description": "", //描述
"main": "index.js", //入口文件
"scripts": { //腳本,key-value格式,可以使用 npm run xxx
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], //關鍵字
"author": "", //作者
"license": "ISC" //協議
}
包版本號
npm包的版本命名格式為: major.minor.patch
- major: 主版本號,新的架構調整,不兼容老版本
- minor: 次版本號,新增功能,兼容老版本
- patch: 修補版本號,修復bug,兼容老版本
當我們安裝一個包之后,可以看到包名的前面有一些符號,例如 ^
、~
等,這些符號決定了當前項目依賴的包的版本號如何選擇
- 沒有符號,例如
1.2.5
,表示必須依賴1.2.5版 ~
:大概匹配某個版本,如果minor版本號指定了,那么minor版本號不變,而patch版本號任意,如果minor和patch版本號未指定,那么minor和patch版本號任意。
例如:
如:~1.1.2,表示>=1.1.2 <1.2.0,可以是1.1.2,1.1.3,1.1.4,.....,1.1.n
如:~1.1,表示>=1.1.0 <1.2.0,可以是同上
如:~1,表示>=1.0.0 <2.0.0,可以是1.0.0,1.0.1,1.0.2,.....,1.0.n,1.1.n,1.2.n,.....,1.n.n
^
:兼容某個版本,版本號中最左邊的非0數字的右側可以任意,如果缺少某個版本號,則這個版本號的位置可以任意
例如:
如:^1.1.2 ,表示>=1.1.2 <2.0.0,可以是1.1.2,1.1.3,.....,1.1.n,1.2.n,.....,1.n.n
如:^0.2.3 ,表示>=0.2.3 <0.3.0,可以是0.2.3,0.2.4,.....,0.2.n
如:^0.0,表示 >=0.0.0 <0.1.0,可以是0.0.0,0.0.1,.....,0.0.n
其它的一些寫法:
>
:必須大於某個版本,如:>1.1.2,表示必須大於1.1.2版>=
:可大於或等於某個版本,如:>=1.1.2,表示可以等於1.1.2,也可以大於1.1.2版本<
:必須小於某個版本 ,如:<1.1.2,表示必須小於1.1.2版本<=
:可以小於或等於某個版本,如:<=1.1.2,表示可以等於1.1.2,也可以小於1.1.2版本x-range
:x的位置表示任意版本,如:1.2.x,表示可以1.2.0,1.2.1,.....,1.2.n*-range
:任意版本,""也表示任意版本,如:*,表示>=0.0.0的任意版本version1 - version2
:大於等於version1,小於等於version2,如:1.1.2 - 1.3.1,表示包括1.1.2和1.3.1以及他們件的任意版本range1 || range2
:滿足range1或者滿足range2,可以多個范圍,如:<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 ❤️.0.0,表示滿足這3個范圍的版本都可以
scripts
scripts節點下配置的是可以運行的腳本。例如在默認配置中的test腳本,我們可以通過下面的命令來調用:
npm run test
如果我們要添加其它腳本,可以在scripts節點添加鍵值對:
"scripts": { //腳本,key-value格式,可以使用 npm run xxx
"test": "echo \"Error: no test specified\" && exit 1",
"dir": "dir" //windows下顯示當前目錄文件列表
}
然后使用npm來運行該腳本:
npm run dir
這里只是為了演示scripts腳本的用法,它的作用是為了減輕我們在開發時的重復工作。再舉個例子,例如使用webpack打包,可以使用命令npx webpack --mode=production
,如果我們每次都使用完整的命令,會顯得很繁瑣,此時我們可以定義一個腳本來簡化操作:
"scripts": { //腳本,key-value格式,可以使用 npm run xxx
"test": "echo \"Error: no test specified\" && exit 1",
"dir": "dir", //windows下顯示當前目錄文件列表
"build": "npx webpack --mode=production"
}
在我們開發的時候,直接使用npm run build
命令即可。
dependencies 和 devDependencies
顧名思義,dependencies 是依賴的包,devDependencies 是開發時依賴的包。例如我們項目中用到了jQuery,很顯然這是項目運行時需要的,那么在添加包時,使用如下命令進行安裝:
npm install jquery
而對於webpack等在開發時用於構建項目的包,我們僅在開發時用到,項目運行時不會使用,因此需要把它們添加到開發依賴中,添加方法如下:
npm install webpack --save-dev
# --save-dev 可以簡寫為 -D,簡化后的命令如下:
npm install webpack -D
package.lock.json
我們在安裝包時,可以看到它的版本依賴,默認是兼容大版本即可。此時會出現一個問題,就是在不同的用戶電腦中,初始化的包的版本可能會出現不一樣的情況,從而造成未可知的bug。為了解決這個問題(這也是yarn誕生的一個原因),npm在5.0之后引入了package.lock.json文件,用來固定包的版本、包的源地址等信息,保證在不同的用戶開發環境中加載的是相同的包。
當用戶使用npm install
命令來安裝我們的依賴項時,會從package.lock.json
文件中進行安裝。官方文檔:package.lock.json
安裝包
當我們從別人的源代碼初始化安裝所有依賴的包時,使用如下命令:
npm install
當我們為項目添加新的包時,使用如下命令:
# 安裝包
npm install webpack --save
# 上面命令的參數 --save 為默認選項,可以忽略,因此可以簡化為:
npm install webpack
# 全局安裝
npm install webpack -g
# 安裝到開發依賴
npm install webpack -g --save-dev
# 上面這行命令還可以簡寫為下面這一行
npm i webpackage -g -D
安裝特定版本的包:
npm install webpack@5.50.0
從指定的源安裝包:
npm install -g cnpm --registry=https://registry.npm.taobao.org