npx
是一個工具,npm v5.2.0
引入的一條命令(npx
),一個npm
包執行器,指在提高從npm
注冊表使用軟件包時的體驗。
使用npx
有如下好處:
1、可以直接執行npm包中的可執行文件
比如,項目內部安裝了測試工具mocha
:
npm install -D mocha
一般來說,調用mocha
,只能在項目腳本和package.json
的script
字段里面,如果想在命令行下調用,必須像下面這樣:
node-modules/.bin/mocha --version
這樣使用比較麻煩,使用npx就簡單多了:
npx mocha --version
npx
的原理很簡單,就是運行的時候,會到node_modules/.bin
路徑和環境變量$PATH
里面,檢測命令是否存在,存在則執行,不存在則臨時安裝mocha
來執行。
2、避免全局安裝模塊
比如我們新建一個vue
項目時,需要先進行腳手架@vue-cli
的全局安裝,然后再進行項目的新建,如下:
npm install -g @vue/cli
vue create my-app
全局包默認的安裝路徑為C:\Users\xxx\AppData\Roaming\npm
,安裝成功后,我們可以在該目錄下查看到安裝的包。
使用npx可簡化如下:
npx @vue/cli my-app
上面代碼運行時,npx
將@vue/cli
下載到一個臨時目錄,使用以后再刪除。所以,以后再次 執行上面的命令時,會重新下載@vue/cli
。
3、可以指定node
版本、命令的版本,解決了不同項目使用不同版本的命令的問題
相信小伙伴們都遇到過舊的項目用的是比較老的node
版本,如果新項目想用新的node
版本,則會存在不兼容的情況,可以通過安裝nvm
來給本地安裝多個node
包解決此問題。使用npx
也可解決該問題。
npx node@12.20.0 -v
4、執行GitHub
源碼
npx
還可以執行GitHub
上面的模塊源碼。需要注意的是,遠程代碼必須是一個模塊,即必須包含package.json
和入口腳本。
5、npx
、yarn create
、npm init
區別
以create-react-app
為例,文檔給了我們三種創建應用的方式,如下:
npx create-react-app my-app
npm init react-app my-app
yarn create react-app my-app
npx
先下載create-react-app
最新包,執行完可執行文件后,即刪除
npm
先全局安裝create-react-app
的包,若已存在,則升級到最新版本,然后執行包的可執行文件,執行完即刪除。npm init
等同於npm create
,可參考官方文檔說明
yarn
先全局安裝create-react-app
的包,若已存在,則升級到最新版本,然后執行包的可執行文件,執行完不進行刪除,會保留在全局。
參考文章
1、npm 和 npx 有什么區別?
2、npx 使用教程
3、npx & yarn create & npm init