npx

npx 介紹

What

npx是一種在npm中安裝工具,也可以被單獨的下載使用

在npm 5.2.0 的時候發(fā)現(xiàn)會買一送一,自動安裝了npx。

pros

再也不需全局安裝任何工具只需要npx <commang>

全局安裝劣勢:

  • 占用本機空間

    npm會在machine上創(chuàng)建一個目錄(mac是/usr/local/lib/node_modules)存放所有global安裝的包, 其實node_module占用的空間比較大的

  • 版本問題:

    假如一個項目中的某一個dependency是全局安裝的,也就意味著不同的開發(fā)人員使用的這個dependency版本完全基于本地的版本,也就會導致不同的開發(fā)人員使用不同的版本

使用npx的優(yōu)勢也就凸顯出來了:

  • 當在執(zhí)行npx <command>的時候,npx會做什么事情?
    • 幫你在本地(可以是項目中的也可以是本機的)尋找這個 command
      • 找到了: 就用本地的版本
      • 沒找到: 直接下載最新版本,完成命令要求
    • 使用完之后不會在你的本機或者項目留下任何東西

因此優(yōu)勢總結:

  • 不會污染本機
  • 永遠使用最新版本的dependency

任何command都通過npx在machine任何位置使用

  • 舉個例子,在某一個項目中使用npm install --save-dev @babel/core @babel/cli安裝babel。此時:
    你在命令行中使用babel script.js一定會報錯說babel不存在,即便你的node_module中babel靜靜的躺在那里,你只有兩種方式可以使用babel:

  • 你可以通過在package.json的script中使用babel去compile某一個directory(用npm run-script的形式)

  • 你也可以通過使用./node_modules/.bin/babel script.js用babel去compile某一個script文件(使用babel包中的可執(zhí)行文件)

  • 那么他的局限性就很大:

雖然你的node_module中有babel,等價于你的machine上有babel,但是你不能方便的在任何位置使用babel,只能通過以上的兩種方式。

  • 但是有了npx在任何位置使用babel command似乎就不是難題了:

    當你任何位置(根目錄下/項目根目錄下)運行npx babel script.js不會再報錯說babel不存在了:

    • npx會幫你找到本機下的babel然后運行

幫助執(zhí)行one-off指令

對于一些工具,比如create-react-app,它們有些特性:

  • 可能很久才會被使用一次
  • 安裝包會很大

我們似乎真的沒必要將他們都安裝到電腦上,所以可以直接使用npx tool-command

幫助切換版本

npx的-p選項允許您指定要安裝的包,并將其添加到正在運行的$PATH中,那么實用的case是什么呢:

當你沒有nvm的時候,幫你方便的切換node版本,假設你本機安裝的node版本是node@8,但是你的項目可能需要使用使用node@6做測試,如果你有nvm,可以使用nvm use v8.11,其實npx也可以幫你做成。

使用npx -p node@6 npm run test

  • npx會幫助你下載node@6
  • 將此時的環(huán)境變成node@6版本
  • 使用node@6幫你執(zhí)行npm run test
  • 命令執(zhí)行完畢之后不會修改你原來的node版本

指令可以理解為使用node@6版本運行npm run test

通過SHELL AUTO FALLBACK 將npx作為所有指令找不到時的fallback地址

在你的命令行配置文件中(~/.bashrc, ~/.zshrc, ~/.config/fish/config.fish)配置以下指令:


image.png

你會驚喜的發(fā)現(xiàn):

當你隨手在任何一個地方執(zhí)行某一個command比如happy-birthday -u pei此時你可能根本沒有這個happy-birthday:

  • 配置了npx fallback
    image.png
  • 沒有配置npx fallback
    image.png

也就是配置了npx fallback,說當你的指令在本機上找不到的時候,npx就會幫助你運行這個command

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 在使用Windows上使用較老版本的nodejs,如何我使用的v8.9其自帶的npx的版本為9.7,在Window...
    尹傲雄閱讀 6,404評論 2 1
  • npm5.2 之后又添加了一個新的工具 npx 用來執(zhí)行 npm 二進制執(zhí)行文件,可以更加方便。 安裝:如果 np...
    jackPan閱讀 2,176評論 0 1
  • babel官網(wǎng) babel 介紹 Babel 是一個通用的多用途 JavaScript 編譯器。通過 Babel ...
    鋒享前端閱讀 1,919評論 0 10
  • 陣陣絲竹颶風,縷縷絢爛之光,手上在11本書就會讓你感到"采菊東籬下,悠然見南山"的淡雅。 我這還不夠,但...
    黃澤岳閱讀 318評論 0 0
  • 2016年12月16日 晴 我離你那么遠 看著你孤單吃飯 寬闊的街道只走最右邊 我失常的勇敢 開始琢磨把蘿卜青菜種...
    鮮栗子閱讀 149評論 0 0

友情鏈接更多精彩內(nèi)容