npm 包管理器的常用命令
測試環境為node>=8.1.3&&npm>=5.0.3
1, 首先是安裝命令
//全局安裝 npm install 模塊名 -g //本地安裝 npm install 模塊名 //一次性安裝多個 npm install 模塊1 模塊2 模塊3 //安裝開發時依賴包 npm install 模塊名 --save-dev //安裝運行時依賴包 npm install 模塊名 --save
2, 查看安裝的目錄
//查看項目中模塊所在的目錄 npm root //查看全局安裝的模塊所在目錄 npm root -g
3, 查看npm的所有命令命令
npm help
4,查看某個包的各種屬性
//查看某個包對於各種包的依賴關系 npm view 模塊名 dependencies
5,查看包的源文件地址
//查看包的源文件地址 npm view 模塊名 repository.url
6
-
查看當前模塊依賴的node最低版本號
npm view 模塊名 engines
-
查看模塊的當前版本號
npm view 模塊名 version //需要注意的是查看到的模塊版本是該模塊再遠程倉庫的版本號,並不是當前項目中所依賴的版本號。 //查看當前項目中應用的某個模塊的版本號的命令為 npm list 模塊名 version
-
查看模塊的歷史版本和當前版本
npm view 模塊名 versions
-
查看一個模塊的所有信息
npm view 模塊名
7,查看npm使用的所有文件夾
npm help folders
8,用於更改包內容后進行重建
npm rebuild 模塊名
9,檢查包是否已經過時
//此命令會列出所有已經過時的包,可以及時進行包的更新 npm outdated
10,更新node模塊
npm update 模塊名 //當然你也可以update 該模塊到指定版本 npm update 模塊名 @版本號 //如果安裝到最新版本可以使用以下命令 npm install 模塊名@latest //如果當前的版本號為2.5.1,是沒辦法進行npm update 模塊名 @2.3.1 將模塊版本號變為2.3.1的,當然,你可以先uninstall,然后進行install @2.3.1
11,卸載node模塊
npm uninstall 模塊名
12,訪問package.json的字段文檔
npm help json
13,發布一個npm包的時候,需要檢驗某個包名是否已經存在
npm search 模塊名
14,npm init:引導你創建一個package.json文件,包括名稱、版本、作者這些信息
-
清除npm的緩存
npm cache clean //慎重使用改命令
15, npm root 查看當前包的安裝路徑,
npm root -g 查看全局的包的安裝路徑
16,npm -v 查看npm的版本
17,查看某個模塊的bugs列表界面
npm bugs 模塊名 //例如運行npm bugs chai則會打開vue倉庫的issue,效果如下圖
18,打開某個模塊的倉庫界面
npm repo 模塊名 //例如運行npm repo vue則會打開vue線上倉庫,效果如下圖
-
打開某個模塊的文檔
npm docs 模塊名 //例如運行npm docs vue則會打開vue的readme.md文檔
-
打開某個模塊的主頁
npm home 模塊名 //例如運行npm home vue則會打開vue模塊的主頁
-
查看當前已經安裝的模塊
npm list //當然我們也可以限制輸入的模塊層級,例如 npm list --depth=0
-
清除未被使用到的模塊
//有時在我們使用npm list的時候,可能會碰到一些問題,就是有些模塊並沒有被項目引用使用,我們還是安裝了這些模塊,那么我們可以一鍵清除這些沒有使用到的模塊 npm prune
版本控制
我們使用node開發時,經常需要依賴一些模塊,我們進行了下載之后,便一直在該版本的模塊環境下進行開發,但是線上的服務器一般都是根據依賴來配置文件,重新下載各個模塊,但是保不齊某個模塊的版本已經更新了,這時線上的包會更新到最新的版本,但你的代碼還是依據老版本來寫的,這時可能會產生一些不知名的Bug,
首先看npm包的版本號的格式X.Y.Z,版本好的格式遵循semver 2.0規范,其中X為主版本號,只有更新了不向下兼容的API時進行修改主版本號,Y為次版本號,當模塊增加了向下兼容的功能時進行修改,Z為修訂版本號,當模塊進行了向下兼容的bug修改后進行修改,這就是“語義化的版本控制”。
默認情況下,當用--save或者--save-dev安裝一個模塊時,npm通過脫字符(^)來限定所安裝模塊的主版本號,而該脫字符對於不同的版本號有不同的更新機制
- ^1.2.1 代表的更新版本范圍為 >=1.2.1 && < 2.0.0
- ^0.2.1 代表的更新版本范圍為 >=0.2.1 && < 0.3.0
- ^0.0.2 代表的更新版本范圍為 0.0.2(相當於鎖定為了0.0.2版本)
##### 對於上述字符的版本控制,我們可以來進行一個嘗試:
首先可以看到package.json中對於vuex的版本依賴為^2.3.1
然后查看以下項目中安裝的vuex模塊的版本號
果然沒錯,改版本號為2.3.1,接下來我們看一下vuex的歷史版本(npm view vuex versions)
可以看到2.3.1-2.5.0之后到了3.0.0,接下來運行npm update vuex,查看以下更新后的版本
現在我們看到更新后的vuex版本號為2.5.0 < 3.0.0,可以驗證第一條規范。
我們再來驗證下主版本號為0的版本控制情況,先將當前項目依賴的vuex版本改為@0.6.1版本.
npm uninstall vuex //卸載vuex成功 npm install vuex@0.6.1 --save //安裝vuex0.6.1版本成功
然后更新當前項目中的vuex版本,執行代碼 npm update vuex
可以通過npm view vuex versions看到vuex的版本歷程,在0.6.3之上為0.7.0,所以當使用脫字符(^)來控制版本號時,當主版本號為0,即代表該模塊在快速構建中時,更新項目時的版本范圍只能更新修訂版本號Z。
對於第三種情況,當主版本和此版本都為0時,代表着該模塊處於一個極其不穩定的狀態,在執行update時並不會進行版本更新。
波浪號(~)是限定模塊的次要版本,(以下規則測試方法同上,便不一 一測試)
- ~1.5.1允許安裝版本號大於1.5.1但小於1.6.0版本的模塊
- ~0.5.1允許安裝版本號為0.6.0
當主版本號/次版本號/修訂版本號為X or x or *時,那么update或install是會下載該分支最新的版本號
- (*)跟新或安裝模塊時會安裝>=0.0.0的最新版本
- 1.x 表示的更新范圍為>=1.0.0&&< 2.0.0
- 1.2.x 表示的更新范圍為>=1.2.0&&< 1.3.0
1,當然我們也可以把項目依賴的包固定在某一個版本,強制大家安裝相同的依賴樹,如下所示:
npm install react --save -E //此命令會將react的版本號進行固定,但是該方式只能控制項目中直接依賴的包的版本,無法控制項目模塊中依賴的包的版本號,所以這種方式也無法讓不同的使用者得到相同的依賴樹。
2,此外我們還可以使用npm shrinkwrap,可以將項目中的模塊版本進行精確鎖定:
這時候只需要運行命令 npm shrinkwrap,便會產生一個npm-shrinkwrap.json文件,這個文件保存了所有當前使用的依賴模塊的版本:把該文件提交到git倉庫中,這樣其他人在clone你的項目的時候,執行npm install命令時,npm檢測到該文件中的信息會完整的還原出完全相同的依賴樹,具體的使用方法如下:
npm install --save-dev react //安裝react npm prune //清除未被使用的模塊 npm shrinkwrap
但是使用這種方法,安裝一個模塊包的方式比較繁瑣。
3,使用yarn我們也可以得到模塊包精確控制的結果
yarn是一個與npm兼容的node包管理器,使用它安裝npm包,會自動在項目目錄創建一個yarn.lock文件,該文件包含了當前項目中所安裝的依賴包的版本信息,其他人在使用yarn安裝項目的依賴包時就可以通過該文件創建一個完全相同的依賴環境。
使用方法如下:
yarn init //使用yarn創建一個項目 yarn add 模塊名 //使用yarn 安裝一個包 //還有很多yarn命令
此外,yarn除了可以自動幫我們鎖定依賴包的版本,yarn還在本地緩存已經安裝過的包,當再次安裝時,直接從本地讀取即可。安裝速度得到大大提升。但yarn的使用需要整個團隊都去使用,還是有一定的成本的。
綜上所述,目前大多數項目中較為簡單的使用規范,在項目中依賴各個模塊時,對於主版本號和次版本號都為0的不穩定的項目,我們可以使用精確版本(exact),對於主版本號為0次版本號不為0的模塊和主版本號不為0的模塊,使用caret Range即脫字符(^)來控制版本。當然,我們也可以對項目依賴模塊的版本進行精確鎖定。
SemVer(Semantic Versioning) 2.0.0
SemVer是一個對npm包版本進行規范的模塊,它對於npm包的版本號有着一系列的規則,以下為摘抄自SemVer 2.0.0中的規則:
- 在版本控制環節我們已經說過了,模塊的版本號采用X.Y.Z的格式,且都必須為非負的正整數,依次為主版本號、次版本號,修改版本號。
- 當規定版本的模塊進行發布之后,對於該模塊的任何修改,都必須發布新版本。
- 主版本號為0.X.Y的模塊處於開發階段,模塊並不穩定。
- 主版本號在有不向下兼容的API發布時必須修改,在主版本號遞增時,次版本號和修訂版本號必須重新歸零。
- 次版本號再有向下兼容的API發布時進行遞增修改,在模塊中有API被棄用時也必須遞增次版本號,當此版本號遞增改變時,修訂版本號Z必須歸零。
- 版本的優先級就是各個版本的排序規則,判斷版本優先級時,必須把版本號從左至右分為主版本號、此版本號、修訂版本號、以及先行版本號來進行比較