npm
全名爲 Node Package Manage
,是 Node.js
的包管理工具, npm
讓開發者更容易安裝和管理項目中的依賴項,使得它在現代的前端開發工做中成爲了一個得力的工具,而在 npm@5.2.0
版本以後,增長 npx
以提供來一些輔助的功能。本文主要來介紹 npx
的特性與其存在的意義。javascript
若是一個 npm
包配置了 bin
,當這個包被安裝的時候,在項目的 node_modules/.bin
下就有會相應的指令來方便執行。html
例如:在項目中添加了 next
來構建 SSR
項目,那麼node_modules/.bin
下就會有 next
的命令。前端
若是須要調用 next
相關的命令,好比查詢 next
版本:vue
以往的方式:java
node node_module/.bin/next -v
複製代碼
npm script 方式:node
{ "script": { "next-v": "node node_module/.bin/next -v" } } 複製代碼
npm run next-v
複製代碼
npx 方式:react
npx next -v
複製代碼
在調用一些安裝包的內置命令時,好比在使用 Jest
進行測試單個文件的時候,對於寫 npm script
和 手動調用 node_modules
下的命令就不太友好,使用 npx
會方便不少。npx
在尋址調用的時候,會到項目的 node_modules/.bin
路徑和系統的 path
中進行查找,檢查命令是否存在。若是不存在則會臨時下載或運行程序包或進行使用。web
例如本地不存在 http-server
模塊,則會自動臨時下載安裝,而後在當前目錄進行啓動一個 web
服務,這至關於一次性的命令。vue-cli
再舉個例子,檢查網站的可訪問性得分:npm
在這以前你是否有碰見過想要嘗試一些CLI工具建立項目,可是卻要進行全局安裝而後在進行建立,若是這個CLI工具只使用一次呢?好比利用 create-react-app
來建立 React
項目,使用 npx
來建立就能夠避免這個問題,並且不用擔憂使用時的升級問題,由於 npx
確保使用最新的生成器或者軟件包。
npx create-react-app my-react-repo
複製代碼
這樣 npx
會自動從註冊表中安裝 create-react-app
軟件包,並調用它,調用完成後又不會保存在全局文件中沒,所以不會污染全局安裝或須要多個步驟。這個特性很是適合生成器之類的軟件包,好比 create-react-app
, vue-cli
, yeoman
等。
# 使用npx建立vue項目 npx -p @vue/cli vue create hello-word 複製代碼
在一些場景下使用npx
切換 Node
版本,比用像 nvm
、 nave
、 n
這樣的 Node
版本管理工具會方便不少。
$ npx node@0.12.8 -v
v0.12.8
複製代碼
npx
從URL執行程序包,但前提是URL上的遠程代碼必須是一個模塊,即必須包含 package.json
和入口腳本。
-p or --package <package>
定義要安裝的軟件包,並添加到正在運行的$PATH
,
讓 npx
強制使用本地模塊,不下載遠程模塊,若是本地沒有該模塊則會出錯。
與 --no-install
相反,讓 npx
強制使用遠程模塊。
設置 npm
緩存的位置,不然爲 npm
默認緩存位置。
在npm run-script
相似外殼程序的環境中執行,並提供全部經常使用的環境變量。若是 NPX
安裝了多個模塊,只有 <string>
參數的第一個項會被看成命令執行,其餘的就需要加上 -p
選項。
禁止npx自己的任何輸出(進度條,錯誤消息,安裝報告),子命令輸出自己不會被禁止。
當二進制是node
腳本時,提供給node
的額外參數。
查看 npx
版本
經過以上咱們知道 npx
是一種執行 npm
包的工具,它很好的提高了使用 npm
包的體驗。 npm
使得在開發中方便的安裝和管理註冊表中託管的依賴項,而 npx
使得更容易使用註冊表中 CLI
工具和託管的其餘可執行文件。解決了以前沒有便捷的方式來交互式地調用本地二進制文件的問題,使得項目的開發管理提高了便捷性。
相關文章: