npm經常使用命令及版本號

npm 包管理器的經常使用命令

測試環境爲node>=8.1.3&&npm>=5.0.3javascript

1, 首先是安裝命令vue

//全局安裝 npm install 模塊名 -g //本地安裝 npm install 模塊名  //一次性安裝多個  npm install 模塊1 模塊2 模塊3 //安裝開發時依賴包 npm install 模塊名 --save-dev //安裝運行時依賴包 npm install 模塊名 --save

2, 查看安裝的目錄java

//查看項目中模塊所在的目錄 npm root //查看全局安裝的模塊所在目錄 npm root -g

3, 查看npm的全部命令命令node

npm help

4,查看某個包的各類屬性react

//查看某個包對於各類包的依賴關係 npm view 模塊名 dependencies

5,查看包的源文件地址git

//查看包的源文件地址 npm view 模塊名 repository.url

6github

  • 查看當前模塊依賴的node最低版本號vuex

    npm view 模塊名 engines
  • 查看模塊的當前版本號npm

     npm view 模塊名 version //須要注意的是查看到的模塊版本是該模塊再遠程倉庫的版本號,並非當前項目中所依賴的版本號。 //查看當前項目中應用的某個模塊的版本號的命令爲 npm list 模塊名 version
  • 查看模塊的歷史版本和當前版本json

    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,效果以下圖

npm bugs

18,打開某個模塊的倉庫界面

 npm repo 模塊名 //例如運行npm repo vue則會打開vue線上倉庫,效果以下圖

npm bugs

  • 打開某個模塊的文檔

     npm docs 模塊名 //例如運行npm docs vue則會打開vue的readme.md文檔
  • 打開某個模塊的主頁

     npm home 模塊名 //例如運行npm home vue則會打開vue模塊的主頁
  • 查看當前已經安裝的模塊

     npm list //固然咱們也能夠限制輸入的模塊層級,例如 npm list --depth=0

    npm list

  • 清除未被使用到的模塊

    //有時在咱們使用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

version1

而後查看如下項目中安裝的vuex模塊的版本號

version2

果真沒錯,改版本號爲2.3.1,接下來咱們看一下vuex的歷史版本(npm view vuex versions)

version3

能夠看到2.3.1-2.5.0以後到了3.0.0,接下來運行npm update vuex,查看如下更新後的版本

version3

如今咱們看到更新後的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版本成功

version5

而後更新當前項目中的vuex版本,執行代碼 npm update vuex

version5

能夠經過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中的規則:

  1. 在版本控制環節咱們已經說過了,模塊的版本號採用X.Y.Z的格式,且都必須爲非負的正整數,依次爲主版本號、次版本號,修改版本號。
  2. 當規定版本的模塊進行發佈以後,對於該模塊的任何修改,都必須發佈新版本。
  3. 主版本號爲0.X.Y的模塊處於開發階段,模塊並不穩定。
  4. 主版本號在有不向下兼容的API發佈時必須修改,在主版本號遞增時,次版本號和修訂版本號必須從新歸零。
  5. 次版本號再有向下兼容的API發佈時進行遞增修改,在模塊中有API被棄用時也必須遞增次版本號,當此版本號遞增改變時,修訂版本號Z必須歸零。
  6. 版本的優先級就是各個版本的排序規則,判斷版本優先級時,必須把版本號從左至右分爲主版本號、此版本號、修訂版本號、以及先行版本號來進行比較
相關文章
相關標籤/搜索