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
