npx:npm包執行工具

NO IMAGE

npm  全名為 Node Package Manage ,是 Node.js 的包管理工具, npm  讓開發者更容易安裝和管理項目中的依賴項,使得它在現代的前端開發工作中成為了一個得力的工具,而在 [email protected] 版本之後,增加 npx  以提供來一些輔助的功能。本文主要來介紹 npx 的特性與其存在的意義。

尋址調用

如果一個 npm 包配置了 bin ,當這個包被安裝的時候,在項目的 node_modules/.bin 下就有會相應的指令來方便執行。

例如:在項目中添加了 next 來構建 SSR 項目,那麼node_modules/.bin 下就會有 next 的命令。

npx:npm包執行工具

如果需要調用 next 相關的命令,比如查詢 next 版本:

以往的方式:

node node_module/.bin/next -v

npm script 方式:

{
"script": {
"next-v": "node node_module/.bin/next -v"
}
}
npm run next-v

npx 方式:

npx next -v

在調用一些安裝包的內置命令時,比如在使用 Jest 進行測試單個文件的時候,對於寫 npm script 和 手動調用 node_modules 下的命令就不太友好,使用 npx 會方便很多。

npx 在尋址調用的時候,會到項目的 node_modules/.bin 路徑和系統的 path 中進行查找,檢查命令是否存在。如果不存在則會臨時下載或運行程序包或進行使用。

執行一次性命令

例如本地不存在 http-server 模塊,則會自動臨時下載安裝,然後在當前目錄進行啟動一個 web 服務,這相當於一次性的命令。

npx:npm包執行工具

再舉個例子,檢查網站的可訪問性得分:

npx:npm包執行工具

在這之前你是否有遇見過想要嘗試一些CLI工具創建項目,但是卻要進行全局安裝然後在進行創建,如果這個CLI工具只使用一次呢?比如利用 create-react-app 來創建 React 項目,使用 npx 來創建就可以避免這個問題,而且不用擔心使用時的升級問題,因為 npx 確保使用最新的生成器或者軟件包。

npx create-react-app my-react-repo

這樣 npx 會自動從註冊表中安裝 create-react-app 軟件包,並調用它,調用完成後又不會保存在全局文件中沒,因此不會汙染全局安裝或需要多個步驟。這個特性非常適合生成器之類的軟件包,比如 create-react-appvue-cliyeoman 等。

# 使用npx創建vue項目
npx -p @vue/cli vue create hello-word

切換node版本

在一些場景下使用npx 切換 Node 版本,比用像 nvmnaven 這樣的 Node 版本管理工具會方便很多。

$ npx [email protected] -v
v0.12.8

執行遠程模塊

npx 從URL執行程序包,但前提是URL上的遠程代碼必須是一個模塊,即必須包含 package.json 和入口腳本。

npx:npm包執行工具

常用參數

-p

-p or --package <package> 定義要安裝的軟件包,並添加到正在運行的$PATH

–no-install

npx 強制使用本地模塊,不下載遠程模塊,如果本地沒有該模塊則會出錯。

–ignore-existing

--no-install 相反,讓 npx 強制使用遠程模塊。

–cache

設置 npm 緩存的位置,否則為 npm 默認緩存位置。

-c

npm run-script類似外殼程序的環境中執行,並提供所有常用的環境變量。如果 NPX 安裝了多個模塊,只有 <string> 參數的第一個項會被當作命令執行,其他的就須要加上 -p 選項。

-q, –quiet

禁止npx本身的任何輸出(進度條,錯誤消息,安裝報告),子命令輸出本身不會被禁止。

-n, –node-arg

當二進制是node腳本時,提供給node的額外參數。

-v, –version

查看 npx 版本

文章最後

通過以上我們知道 npx 是一種執行 npm 包的工具,它很好的提升了使用 npm 包的體驗。 npm 使得在開發中方便的安裝和管理註冊表中託管的依賴項,而 npx  使得更容易使用註冊表中 CLI 工具和託管的其他可執行文件。解決了之前沒有便捷的方式來交互式地調用本地二進制文件的問題,使得項目的開發管理提升了便捷性。

相關文章:

相關文章

前端安全防範知識XSS/CSRF/點擊劫持/中間人攻擊及防護方案

JS基本類型、引用類型梳理

PostGIS_小白筆記_行政區劃邊界

基於函數計算+TensorFlow的ServerlessAI推理