前幾天接觸到了npx牺荠,發(fā)現(xiàn)這個(gè)命令非常好用翁巍,這里總結(jié)下npx的使用。
npx是什么休雌?
npx是npm5.2之后發(fā)布的一個(gè)命令灶壶。官網(wǎng)說(shuō)它是“execute npm package binaries”,就是執(zhí)行npm依賴包的二進(jìn)制文件杈曲,簡(jiǎn)而言之例朱,就是我們可以使用npx來(lái)執(zhí)行各種命令。
npx官網(wǎng):https://www.npmjs.com/package/npx
為什么要使用npx鱼蝉?
解決的問(wèn)題
在命令行執(zhí)行本地已安裝的依賴包命令
使用npx可以在命令行直接執(zhí)行本地已安裝的依賴包命令洒嗤,不用在scripts腳本寫入命令,也不用麻煩的去找本地腳本魁亦。
首先來(lái)看這個(gè)場(chǎng)景:
我們本地安裝了一個(gè)依賴包:
npm i -D mocha
想要在本地(當(dāng)前目錄)執(zhí)行它時(shí)渔隶,什么都不做時(shí)是不能運(yùn)行這個(gè)命令的:
我們一般會(huì)使用幾種方式來(lái)運(yùn)行我們想要運(yùn)行的命令:
- 使用
package.json
的scripts腳本
//package.json
"scripts": {
"findmocha": "mocha --version",
}
然后在命令行運(yùn)行:
npm run findmocha
- 在命令行中直接找到模塊的二進(jìn)制文件運(yùn)行
- 全局安裝模塊
而使用npx,我們可以直接在命令行執(zhí)行我們要運(yùn)行的命令:
npm i -D mocha
npx mocha --version
不用全局安裝洁奈,直接在命令行執(zhí)行一次性命令
有很多命令间唉,我們只需要執(zhí)行一次的,但是卻要全局安裝一次利术,實(shí)在不科學(xué)呈野,使用npx,可以在不全局安裝依賴包的情況下印叁,運(yùn)行命令被冒,而且運(yùn)行后不會(huì)污染全局環(huán)境
比如
npx create-react-app my-react-app
npx 將create-react-app下載到一個(gè)臨時(shí)目錄,使用以后再刪除轮蜕。
每次運(yùn)行這個(gè)命令昨悼,都會(huì)重新下載依賴包,運(yùn)行后刪除跃洛。
切換node版本來(lái)運(yùn)行命令
當(dāng)你想要運(yùn)行的命令不兼容當(dāng)前的nodejs版本率触,可以通過(guò)npx來(lái)切換版本,指定某個(gè)版本的 Node 來(lái)運(yùn)行命令汇竭。
npx的-p選項(xiàng)指定要安裝的包葱蝗,并將其添加到正在運(yùn)行的$PATH中
如:
npx node@6 -v
npx node@7 -v
npx node@8 -v
以上的命令,會(huì)自動(dòng)下載需要的node细燎,執(zhí)行完命令后刪除两曼。
npx的原理
npx的原理,就是在運(yùn)行它時(shí)找颓,執(zhí)行下列流程:
- 去
node_modules/.bin
路徑檢查npx后的命令是否存在合愈,找到之后執(zhí)行叮贩; - 找不到击狮,就去環(huán)境變量
$PATH
里面佛析,檢查npx后的命令是否存在,找到之后執(zhí)行; - 還是找不到彪蓬,自動(dòng)下載一個(gè)臨時(shí)的依賴包最新版本在一個(gè)臨時(shí)目錄,然后再運(yùn)行命令,運(yùn)行完之后刪除庐氮,不污染全局環(huán)境薪夕。
安裝和參數(shù)說(shuō)明
安裝
npm install -g npx
常用參數(shù)
-p 參數(shù)
-p參數(shù)用于指定 npx 所要安裝的模塊
npx -p node@6 node -v
--no-install 參數(shù)
強(qiáng)制使用本地模塊,不下載遠(yuǎn)程模塊酷誓,如果本地不存在該模塊披坏,就會(huì)報(bào)錯(cuò)。
--ignore-existing 參數(shù)
忽略本地的同名模塊盐数,強(qiáng)制安裝使用遠(yuǎn)程模塊
使用場(chǎng)景總結(jié)
使用npx執(zhí)行 本地命令
npm i -D mocha
npx mocha --version
使用npx一次性執(zhí)行命令
npx create-react-app my-react-app
使用npx切換node版本
npx node@6 -v
使用npx執(zhí)行 GitHub 源碼
npx github:piuccio/cowsay
遠(yuǎn)程代碼必須是一個(gè)模塊棒拂,即必須包含package.json和入口腳本
使用npx開啟一個(gè)靜態(tài)服務(wù)器
npx http-server #默認(rèn)返回根目錄下index.html
npx http-server -p 3000 #指定端口
參考鏈接:
https://www.npmjs.com/package/npx
http://www.ruanyifeng.com/blog/2019/02/npx.html
http://www.reibang.com/p/a4d2d14f4c0e