」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > npm 與 npx

npm 與 npx

發佈於2024-11-08
瀏覽:409

npm Vs npx

如果您一直在使用 Node.js,您可能遇到過 npm 和 npx。
雖然它們聽起來很相似且都是 Node.js 生態系統不可或缺的一部分,但它們有不同的用途。這篇文章將探討 npm 和 npx 之間的差異,幫助您了解何時以及為何使用它們。

什麼是NPM?

NPM 是 Node Package Manager 的縮寫,是 Node.js 的預設套件管理器。它允許開發人員在其專案中安裝、共用和管理套件(庫或程式碼模組)。

以下是 npm 幫助完成的一些常見任務:

  • 安裝依賴項:

npm install 


  • 管理套件版本:鎖定庫的特定版本以確保一致的建置。

  • 執行專案特定腳本: 在 package.json 檔案中定義。


npm run 


NPX是什麼?

npx 是 NPM 版本 5.2.0(2017 年 7 月)中引入的工具。 npm 管理相依性和套件,而 npx 旨在執行 Node.js 套件,尤其是 CLI 工具,而無需全域安裝它們。

NPM 與 NPX 之間的主要差異

1。套件安裝與執行

  • NPM: 當您使用 npm 安裝軟體包時,它會將該軟體包全域安裝或本機安裝到您的專案目錄。這意味著您必須先安裝軟體包才能使用它。

npm install -g create-react-app
create-react-app my-app


  • NPX : 使用 npx,您可以執行 CLI 工具或可執行檔 而無需全域安裝它們。 例如,您可以執行 create-react-app 而無需全域安裝。

npx create-react-app my-app


這可以節省時間和磁碟空間,因為您可以避免安裝可能只使用一次的軟體包。


2.全球套餐
當您使用 npm 時,全域套件會安裝並保留在您的系統中,這有時會使您的環境變得混亂。

使用 npx,您可以執行套件,而不必擔心將其永久保留在系統上。

使用 npm 全域安裝套件的範例:


npm install -g typescript
tsc --version



使用 npx,無需全域安裝:


npx tsc --version



3.自動包裹處理
當您使用 npx 執行命令時,它會自動檢查該套件是否存在於本機或全域,如果不存在,它會暫時下載並執行它。這對於運行一次性任務特別有用。

例如:


npx cowsay "Hello, World!"


如果未安裝,這將下載owsay包,運行它,然後清理。


4。不含腳本打包可執行檔
當使用 npm 執行 package.json 腳本中定義的命令時,您可以編寫:


npm run my-script


但使用npx,你可以直接執行可執行指令:


npx my-script


如果腳本沒有在 package.json 中明確定義,這尤其有用。

何時使用 NPM

- 管理依賴: 使用 npm 來安裝、更新和刪除專案依賴項。

- 運行特定於專案的腳本: 在 package.json 中定義並根據您的專案量身定制。

- 管理套件版本: 鎖定特定版本的程式庫以保持專案一致性。

何時使用 NPX

- 一次性套件執行: 對於不想全域安裝的套件使用 npx,例如只使用一次的 CLI 工具。

- 運行可執行檔: 對於像 create-react-app 這樣的命令,npx 允許您無需全域安裝即可運行它們。

- 測試不同版本:快速執行特定版本的工具,無需安裝。

最後,npm 和 npx 都是 Node.js 生態系中必不可少的工具,但它們有不同的用途。使用 npm 管理專案的依賴項,使用 npx 執行套件而無需永久安裝。

這個小小的差異可以使您的工作流程更加高效,節省時間並避免不必要的全域安裝。

版本聲明 本文轉載於:https://dev.to/jagroop2001/npm-vs-npx-1anc?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • PHP SimpleXML解析帶命名空間冒號的XML方法
    PHP SimpleXML解析帶命名空間冒號的XML方法
    在php 很少,請使用該限制很大,很少有很高。例如:這種技術可確保可以通過遍歷XML樹和使用兒童()方法()方法的XML樹和切換名稱空間來訪問名稱空間內的元素。
    程式設計 發佈於2025-04-18
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-04-18
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案:的,請訪問量很大,並應為procectiquiestate的,並在整個代碼上正確格式不多: java.text.simpledateformat; 導入java.util.calendar; 導入java...
    程式設計 發佈於2025-04-18
  • JavaScript中如何動態訪問全局變量?
    JavaScript中如何動態訪問全局變量?
    在JavaScript 一種方法是使用窗口對象存儲和檢索變量。通過引用全局範圍,可以使用其名稱動態訪問變量。 //一個腳本 var somevarname_10 = 20; //另一個腳本 window.all_vars = {}; window.all_vars ['somevarna...
    程式設計 發佈於2025-04-18
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-04-18
  • Python中range函數的使用技巧及示例
    Python中range函數的使用技巧及示例
    [2 [2 我的帖子解釋了zip()。 我的帖子解釋了枚舉()。 *備忘錄: 第一個參數是開始(可選 - 默認:0-Type:int)。 第二個參數是stop(必需類型:int)。 第三參數是步驟(可選 - 默認:1-Type:int)。 start =,stop = and step ...
    程式設計 發佈於2025-04-18
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-04-18
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-04-18
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-04-18
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-04-18
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    程式設計 發佈於2025-04-18
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-18
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-04-18
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-04-18
  • C++類成員顯式特化為何在命名空間外失敗?
    C++類成員顯式特化為何在命名空間外失敗?
    在命名空間範圍外的顯著專業:非標準G c模板編程中的一個錯誤涉及對高效代碼生成的類成員的明確專業化。但是,如以下代碼段所示,顯式專業的放置至關重要: Template 班級 { // ... 模板 void驗證(int位置,int約束[]) { } ...
    程式設計 發佈於2025-04-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3