那些咱們必須掌握的npm知識

簡介

npmNode 的模塊管理器,功能極其強大。主要分爲三個部分:
html

  1. 網站
    開發者能夠在該網站查找各類各樣的包,以供使用。node

  2. 註冊表(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

  3. 命令行工具 (CLI)
    開發者可使用該命令行工具和 npm 進行交互,包括包的安裝,發佈等。git

安裝機制

node 模塊的首次安裝過程能夠簡單分爲四步:github

  1. 執行 npm install <package> 命令
  2. npmregistry 註冊表查詢模塊壓縮包的網址
  3. 下載壓縮包,存放在緩存目錄,默認就是 ~/.npm
  4. 解壓壓縮包到當前項目的 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.11.0.0-beta.42.0.0-rc.1 等。經常使用的先行版本通常爲 alphabetarcstablecsp 等。

發佈

  • 修改版本號
    npm version major : 主版本號加 1,其他版本號歸 0。
    npm version minor : 次版本號加 1,修訂號歸 0。
    npm version patch : 修訂號加 1。
    npm version 版本號 : 設置版本號爲指定的版本號
    npm version prerelease : 先行版本號增長1
    npm 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"
  • 禁用版本提交和標記tag
    npm version prerelease --no-git-tag-version
  • 發佈
    npm publish : 發佈npm包

tag

npm 中的 tag 相似於 git 中的 branch ,發佈者能夠在指定的 tag 上進行發版,使用者能夠選擇指定 tag 來安裝,默認的taglatest。這對於咱們平常開發很是有用,不少時候咱們想要發佈版原本進行驗證功能,可是又不想影響正在使用的人,咱們就能夠利用tag和先行版原本進行發包。

npm publish --tag alpha  // 發版到名爲alpha的tag上
npm i <package>@<tag>    // 從指定tag上安裝包
複製代碼

link

咱們在平常的開發中常常會有這樣的狀況:有兩個項目分別爲A和B,A項目咱們封裝了一些基本的邏輯,供其餘項目進行使用;B項目爲咱們的業務項目,依賴了A項目。而後如今來了一個新的需求,須要對AB兩個項目進行改動,此時咱們寫完了A項目,想要在B項目中進行驗證A項目的邏輯是否正確。
固然咱們能夠經過A項目發版,而後B項目進行版本升級來進行驗證,可是這致使的問題就是可能須要頻繁發版;另一種解決方案就是 link

具體作法以下:

  1. 在A項目中執行 npm link 命令。
  2. 在B項目中執行 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 : 用編輯器打開配置文件

例如咱們常常會對 npmregistry 進行設置
npm config set registry https://registry.npm.taobao.org/

npm ci

  • 該命令只能一次安裝整個項目,不能添加單獨的依賴項
  • 項目必須有 package-lock.json 文件
  • 每次開始安裝以前,都會清除 node_modules
  • 不會改寫 package.jsonpackage-lock.json 文件
  • 安裝速度更快,更嚴格

不少時候,咱們新克隆一個項目,進行 npm i 安裝的時候,常常會出現改動 package.jsonpackage-lock.json 文件的狀況,這有的時候會帶來一些風險,而此時使用 npm ci 就是一個好的選擇。

查詢包信息

  • npm view 包名 : 顯示包的詳細信息
  • npm view 包名 versions : 顯示包的全部歷史版本
  • npm repo 包名 : 打開包的源碼倉庫頁面
  • npm docs 包名 : 打開包的文檔地址

其餘

  • npm login : 登錄 npm
  • npm whoami : 顯示 npm 用戶名
  • npm bin : 顯示 npm 的 bin 文件夾的路徑
  • npm root : 顯示 npm 根目錄

參考文章

相關文章
相關標籤/搜索