記錄--npm, npx, cnpm, yarn, pnpm梭哈

来源:https://www.cnblogs.com/smileZAZ/p/17980646
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 依賴管理解決了在軟體開發過程中管理和協調各種依賴項的問題,簡化了開發流程,提高了項目的可靠性、可維護性和可重覆性。它們幫助開發人員更高效地管理項目的依賴關係,減少了潛在的錯誤和衝突,並提供了更好的開發體驗。 常用的依賴管理 在 JavaS ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

依賴管理解決了在軟體開發過程中管理和協調各種依賴項的問題,簡化了開發流程,提高了項目的可靠性、可維護性和可重覆性。它們幫助開發人員更高效地管理項目的依賴關係,減少了潛在的錯誤和衝突,並提供了更好的開發體驗。


常用的依賴管理

在 JavaScript 生態系統中,有多種工具可用於管理項目的依賴項。

  1. npm(Node Package Manager):npm 是 Node.js 官方提供的包管理器,用於安裝、管理和發佈 JavaScript 包。它是 Node.js 安裝時預設包含的工具。通過 npm install 命令可以安裝項目依賴。
npm install package-name
  1. pnpm:pnpm 是一個快速、磁碟空間效率高的包管理器。與 npm 不同,pnpm 採用了符號鏈接的方式共用依賴項,因此在項目之間共用依賴時可以節省磁碟空間。pnpm 的命令與 npm 類似。
pnpm install package-name
  1. yarn:yarn 是由 Facebook 開發的另一個包管理器,旨在提供更快、更可靠的依賴管理。它具有與 npm 類似的功能,但執行速度更快,並且具有一些額外的功能,例如離線模式和鎖定文件。與 npm 不同,yarn 使用 yarn add 命令來安裝依賴。
yarn add package-name
  1. npx:npx 是 npm 5.2.0 版本及以上內置的命令行工具,用於執行項目安裝的依賴項中的可執行文件。它可以臨時安裝依賴項並運行其中的命令,而無需全局安裝。
npx command-name
  1. cnpm:cnpm 是淘寶鏡像提供的 npm 的鏡像版本,用於加速國內用戶對 npm 包的安裝和下載速度。它是通過將 npm 的源地址配置為淘寶的源地址來實現的。與 npm 相比,使用 cnpm 可以更快地安裝依賴項。

常用依賴管理的對比

準確地說,npx 並不是一個專門的依賴管理工具,而是 npm 附帶的一個命令行工具,用於臨時執行項目依賴中的可執行文件,而無需全局安裝。以下對其它常用依賴管理工具的對比,npx在後續小節會提到期妙用。

優勢pnpmnpmcnpmYarn
性能 - 採用硬鏈接來共用依賴項,減少磁碟空間占用和安裝時間 - 單線程安裝和構建依賴項 - 採用並行安裝模式,速度較快 - 並行安裝和構建依賴項,速度較快
  - 並行安裝和構建依賴項,提高安裝速度      
  - 增量安裝依賴項,只安裝更新的部分      
  - 本地緩存和離線安裝支持      
效率 - 快速的重覆安裝速度 - 較慢的重覆安裝速度 - 較快的重覆安裝速度 - 快速的重覆安裝速度
  - 較小的網路傳輸量      
依賴大小 - 僅保存每個包的單個實例 - 需要保存每個包的多個實例,占用較大的磁碟空間 - 僅保存每個包的單個實例,占用較小的磁碟空間 - 僅保存每個包的單個實例,占用較小的磁碟空間
鎖定文件機制 使用 pnpm-lock.yaml 使用 package-lock.json 使用 package-lock.json 使用 yarn.lock
生態系統支持 - 生態系統相對較小,但相容 npm 生態系統 - 龐大的生態系統和廣泛的社區支持 - 生態系統相對較小,可能有一些包不完全支持 - 龐大的生態系統和廣泛的社區支持
         
社區支持與更新頻率 - 社區相對較小,更新頻率較低 - 龐大的社區支持和活躍的更新頻率 - 社區相對較小,更新頻率較低 - 龐大的社區支持和活躍的更新頻率

軟鏈接與硬鏈接

在依賴管理工具中,常見的使用軟鏈接和硬鏈接的方式有以下情況:

  1. 符號鏈接(Symbolic Link)或軟鏈接(Soft Link):

    • npm:npm使用符號鏈接來創建軟鏈接。當使用npm link命令時,它會創建一個全局軟鏈接,將全局安裝的模塊鏈接到當前項目中,從而實現模塊的共用和開發環境的快速調試。
    • Yarn:Yarn也使用符號鏈接來創建軟鏈接。類似於npm link,Yarn通過yarn link命令創建一個全局軟鏈接,將全局安裝的模塊鏈接到當前項目中。
  2. 硬鏈接(Hard Link):

    • pnpm:pnpm使用硬鏈接來共用已安裝的依賴項。當安裝依賴項時,pnpm會在項目之間創建硬鏈接,這樣相同的依賴項可以被多個項目共用,減少了磁碟空間占用和安裝時間。

需要註意的是,符號鏈接(Symbolic Link)是一種創建鏈接的方式,它創建了一個文件或目錄的指向目標的鏈接。而軟鏈接(Soft Link)是符號鏈接的一種特殊類型,用於指向文件或目錄。硬鏈接(Hard Link)創建了一個新的文件名,直接在文件系統中指向同一個索引節點和數據。

軟硬鏈接的適用場景

軟鏈接和硬鏈接各有其適用的情況,沒有絕對的好與壞。它們的選擇取決於具體的使用場景和需求。

軟鏈接的優點
  1. 跨文件系統:軟鏈接可以跨越不同的文件系統,可以指向其他分區或磁碟上的文件或目錄。
  2. 可讀性:軟鏈接是可讀的,可以通過查看鏈接文件獲取目標文件或目錄的路徑信息。
  3. 靈活性:軟鏈接可以指向文件和目錄,可以創建迴圈鏈接(即鏈接的鏈條形成閉環),可以鏈接到不存在的目標,可以鏈接到目錄的特定子目錄。
硬鏈接的優點
  1. 空間效率:硬鏈接不會額外占用磁碟空間,多個鏈接共用相同的數據和索引節點,節省存儲空間。
  2. 性能:由於硬鏈接直接指向同一索引節點,訪問硬鏈接文件的速度與訪問目標文件相同,不需要額外的解析步驟。
  3. 指向目錄:硬鏈接可以指向目錄,而軟鏈接無法直接指向目錄。

根據具體的使用情況,可以選擇合適的鏈接類型。一般來說:

  • 如果需要跨越文件系統或者需要鏈接到目錄,可以選擇軟鏈接。
  • 如果註重空間效率和性能,並且在同一文件系統內進行鏈接,可以選擇硬鏈接。

對於pnpm來說,當一個項目使用pnpm安裝依賴項時,pnpm會將這些依賴項安裝到一個稱為node_modules/.pnpm的目錄中。其他項目可以通過創建硬鏈接來使用這個已安裝的依賴項,而無需在各自項目的node_modules目錄中重覆安裝。

這種共用依賴項的機制使得多個項目可以共用相同的依賴項,但每個項目仍然需要維護自己的package.json文件和項目特定的配置。這樣,每個項目可以獨立地管理自己的開發和構建過程,而共用的依賴項保持一致,減少了重覆的依賴項下載和存儲消耗。這是pnpm的一項優勢,可以提高項目的構建速度和整體效率。

npx的妙用

npx 是一個非常有用的命令行工具,特別適用於以下幾種場景:

  1. 臨時執行項目依賴的可執行文件: 有時候你可能需要在命令行中臨時執行某個項目依賴的可執行文件,而不想全局安裝這個工具。npx 可以幫助你在不污染全局環境的情況下直接運行這些可執行文件。
npx eslint index.js

上述示例中,我們使用 npx 來運行項目依賴中的 eslint 工具,對 index.js 文件進行代碼檢查,而無需事先全局安裝 eslint。

  1. 執行最新版本的工具: npx 可以確保你運行的是最新版本的工具。當你使用全局安裝的工具時,可能會受限於舊版本,而 npx 可以自動下載和使用最新版本。
npx create-react-app my-app

在上述示例中,我們使用 npx 創建一個新的 React 應用程式,npx 會自動下載最新版本的 create-react-app 工具並使用它來初始化項目。

  1. 嘗試新的工具和庫: 當你想嘗試一個新的工具或庫時,不必將其全局安裝,只需使用 npx 運行它。這樣可以節省磁碟空間,並且你可以快速嘗試新工具而無需擔心與現有環境衝突。
npx next init my-app

在上述示例中,我們使用 npx 初始化一個新的 Next.js 應用程式,而不必預先全局安裝 Next.js。

  1. 運行一次性命令: 當你只需要運行一次性的命令時,npx 是一個很好的選擇。你可以直接在命令行中指定要運行的命令,而無需創建額外的腳本文件。
npx http-server

在上述示例中,我們使用 npx 啟動一個簡單的 HTTP 伺服器,而不必事先編寫啟動腳本。

總之,npx 是一個非常方便的工具,適用於在命令行中臨時執行項目依賴的可執行文件、運行最新版本的工具、嘗試新的工具和庫,以及運行一次性命令等場景。

npx的執行機制

當你使用 npx 執行可執行文件時,npx 會首先檢查本地是否已經存在該可執行文件。如果本地已經安裝了這個可執行文件(位於項目的 node_modules/.bin 目錄中),npx 會直接運行它,而無需下載。

如果本地不存在該可執行文件,npx 會自動下載對應的包,並將其安裝在一個臨時目錄中,然後執行該可執行文件。這意味著 npx 會在需要時臨時下載所需的包,而不會將其全局安裝或污染項目的依賴。

臨時下載的包會被存儲在一個緩存目錄中,以便下次使用相同的包時可以快速載入。預設情況下,npx 使用 npm 的緩存目錄作為臨時下載的包的存儲位置。

在執行完可執行文件後,npx 會自動刪除臨時下載的包,以節省磁碟空間。這意味著每次使用 npx 執行可執行文件時,它都會檢查本地是否存在該包,如果不存在則臨時下載,執行完後再刪除。

總之,npx 會檢查本地是否已經安裝了要執行的可執行文件,如果沒有,則會臨時下載並執行它,執行完畢後再刪除臨時下載的包。這樣可以確保你在運行命令時使用的是最新版本的工具,同時避免全局安裝或污染項目的依賴。

本文轉載於:

https://juejin.cn/post/7326268908984352777

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 【版權聲明】未經博主同意,謝絕轉載!(請尊重原創,博主保留追究權) https://www.cnblogs.com/cnb-yuchen/p/17977495 出自【進步*於辰的博客】 之前使用SSM+JSP做網站開發,由於沒有註意setter、getter的隱式調用問題,出現了多次bug,對開發進 ...
  • C# 布爾值 在編程中,通常需要一個只能有兩個值之一的數據類型,比如: 是 / 否 開 / 關 真 / 假 為此,C# 有一個 bool 數據類型,可以取 true 或 false 的值。 布爾值 使用 bool 關鍵字聲明布爾類型,只能取 true 或 false 的值: 示例: bool isC ...
  • 概述:在C#中,字元串連接有兩種實現方法:使用`+`運算符和使用`StringBuilder`。前者在每次連接時都會創建新的字元串對象,效率較低。後者通過內部管理字元數組,避免了頻繁的記憶體分配和垃圾回收,因此性能更高。在處理大量字元串連接時,使用`StringBuilder`可以顯著提高性能。這兩種 ...
  • DevToys —— 號稱是開發人員的“瑞士軍刀”,一款適用於開發者的工具集合,包含各種實用的開發小工具。JSON格式化、文本對比、正則表達式...無需網路,離線即可使用! ...
  • Linux 是一個嚴謹的操作系統,每個目錄存放什麼文件是有明確的要求和規範的。我們應該去瞭解這些目錄的作用,然後按照目錄要求去操作。 ...
  • 一、海豚調度介紹 Apache DolphinScheduler 是一個分散式易擴展的可視化DAG工作流任務調度開源系統。適用於企業級場景,提供了一個可視化操作任務、工作流和全生命周期數據處理過程的解決方案。 Apache DolphinScheduler 旨在解決複雜的大數據任務依賴關係,併為應用 ...
  • 下麵介紹三種用於進行排序的專用視窗函數: 1、RANK() 在計算排序時,若存在相同位次,會跳過之後的位次。 例如,有3條排在第1位時,排序為:1,1,1,4······ 2、DENSE_RANK() 這就是題目中所用到的函數,在計算排序時,若存在相同位次,不會跳過之後的位次。 例如,有3條排在第1 ...
  • 在近日舉辦的鴻蒙生態千帆啟航儀式上,華為常務董事、終端BG CEO餘承東表示,鴻蒙生態設備已經增至8億 ,將打開萬億產業新藍海。 在本次論壇上,華為宣佈HarmonyOS NEXT鴻蒙星河版(開發者預覽版)已面向開發者開放申請。該版本,能夠實現原生精緻、原生易用、原生流暢、原生安全、原生智能、原生互 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...