npm
是 Node
的模塊管理器,功能極其強大。主要分爲三個部分:
html
網站
開發者能夠在該網站查找各類各樣的包,以供使用。node
註冊表(registry)
註冊表是一個巨大的數據庫,保存了每一個包(package)的信息。
例如咱們要查詢 react
包的信息,能夠訪問https://registry.npmjs.org/react
,就會看到 react
模塊全部版本的信息。
模塊名後面,還能夠跟上版本號或者標籤,用來查詢某個具體版本的信息,例如:https://registry.npmjs.org/react/16.8.1
查看 react
16.8.1版本的信息
具體用法就是,https://registry.npmjs.org/
後面跟上模塊名,就會獲得一個JSON對象, 包含模塊全部版本的信息。react
命令行工具 (CLI)
開發者可使用該命令行工具和 npm
進行交互,包括包的安裝,發佈等。git
node
模塊的首次安裝過程能夠簡單分爲四步:github
npm install <package>
命令npm
向 registry
註冊表查詢模塊壓縮包的網址~/.npm
node_modules
目錄那麼什麼是壓縮包的網址呢?
咱們經過註冊表查詢模塊的信息時,返回的 JSON 對象裏面,有一個 dist.tarball
屬性,就是模塊該版本壓縮包的網址。數據庫
包名安裝
npm i react
: 默認安裝 react
模塊 latest
標籤上的最新版本npm
包名加版本
npm i react@16.8.1
: 安裝 react
模塊16.8.1的版本json
包名加 tag
npm i react@next
: 安裝 react
模塊 next
標籤上的最新版本緩存
tarball url
npm i https://registry.npmjs.org/react/-/react-16.8.1.tgz
: 安裝 react
模塊16.8.1的版本markdown
tarball file
npm i file: xxxx.xxx.tgz
tarball file 能夠經過 npm pack
命令獲得
git url
npm i git+https://github.com/facebook/react.git
username/project
npm i github:facebook/react
npm
採用了 semver
規範做爲依賴版本管理方案,版本格式通常爲:主版本號.次版本號.修訂號。
major
):通常改動很大,不兼容低版本。minor
):兼容同一個大版本的API和用法。patch
):通常用來修復bug。1.0.0-alpha.1
, 1.0.0-beta.4
, 2.0.0-rc.1
等。經常使用的先行版本通常爲 alpha
,beta
,rc
,stable
,csp
等。npm version major
: 主版本號加 1,其他版本號歸 0。npm version minor
: 次版本號加 1,修訂號歸 0。npm version patch
: 修訂號加 1。npm version 版本號
: 設置版本號爲指定的版本號npm version prerelease
: 先行版本號增長1npm version prerelease --preid=<prerelease-id>
: 指定先行版本的名字 // 假定如今的版本號是1.1.1
npm version major // 2.0.0
npm version minor // 1.2.0
npm version patch // 1.1.2
npm version prerelease // 1.1.2-0
npm version prerelease --preid=alpha // 1.1.2-alpha.0
npm version 4.1.2 // 4.1.2
複製代碼
執行 npm version
修改完版本號以後,還會默認執行 git add
-> git commit
-> git tag
操做,commit
的信息和爲 tag
均爲版本號。commit
信息npm version
命令後加上 -m
選項便可,%s
會被替換成爲版本號。npm version prerelease -m "update %s"
npm version prerelease --no-git-tag-version
npm publish
: 發佈npm包npm
中的 tag
相似於 git
中的 branch
,發佈者能夠在指定的 tag
上進行發版,使用者能夠選擇指定 tag
來安裝,默認的tag
是 latest
。這對於咱們平常開發很是有用,不少時候咱們想要發佈版原本進行驗證功能,可是又不想影響正在使用的人,咱們就能夠利用tag和先行版原本進行發包。
npm publish --tag alpha // 發版到名爲alpha的tag上
npm i <package>@<tag> // 從指定tag上安裝包
複製代碼
咱們在平常的開發中常常會有這樣的狀況:有兩個項目分別爲A和B,A項目咱們封裝了一些基本的邏輯,供其餘項目進行使用;B項目爲咱們的業務項目,依賴了A項目。而後如今來了一個新的需求,須要對AB兩個項目進行改動,此時咱們寫完了A項目,想要在B項目中進行驗證A項目的邏輯是否正確。
固然咱們能夠經過A項目發版,而後B項目進行版本升級來進行驗證,可是這致使的問題就是可能須要頻繁發版;另一種解決方案就是 link
。
具體作法以下:
npm link
命令。npm link A的包名
命令。執行完上述兩步以後,此時B項目中 node_modules
裏A的依賴就會指向咱們的A項目。這樣就能夠不用發版進行驗證,很是方便。固然 link
的本質原理其實就是軟鏈接。
npx
npx
執行 Node 軟件包的工具。原理很簡單,就是運行的時候,會到 node_modules/.bin
路徑和環境變量 $PATH
裏面,檢查命令是否存在;若是存在,則執行;不存在,則進行臨時安裝,而後執行,執行完畢將包刪除。
npm config
命令用來管理 npm 的配置
npm config set <key> <value>
: 設置一些配置npm config get <key>
: 獲取指定的配置npm config delete <key>
: 刪除指定的配置npm config list
: 配置列表npm config edit
: 用編輯器打開配置文件例如咱們常常會對 npm
的 registry
進行設置
npm config set registry https://registry.npm.taobao.org/
npm ci
package-lock.json
文件node_modules
package.json
和 package-lock.json
文件不少時候,咱們新克隆一個項目,進行 npm i
安裝的時候,常常會出現改動 package.json
和 package-lock.json
文件的狀況,這有的時候會帶來一些風險,而此時使用 npm ci
就是一個好的選擇。
npm view 包名
: 顯示包的詳細信息npm view 包名 versions
: 顯示包的全部歷史版本npm repo 包名
: 打開包的源碼倉庫頁面npm docs 包名
: 打開包的文檔地址npm login
: 登錄 npmnpm whoami
: 顯示 npm 用戶名npm bin
: 顯示 npm 的 bin 文件夾的路徑npm root
: 顯示 npm 根目錄