【譯】npm包運行器簡介:npx

原文地址node

更新 npm 到它的最新版本 npm@5.2.0 的話,可能注意到在一般的 npm: npx下,它安裝了一個二進制包。react

npx 是一個用於完善從 npm 註冊中使用包的體驗的工具——一樣的,npm 在安裝和管理註冊的依賴上比較容易,npx在使用 CLI 和在註冊的其餘可執行腳本比較容易。它簡化了不少事情,目前,須要一些平時 npm 的套路。git

不用 npm run-script 使用本地安裝工具

安裝 cowsay 做爲開發依賴,而後用 `$ npx cowsay` 運行

過去幾年,npm 生態移動了愈來愈多的安裝工具做爲項目本地的 devDependencies,而不是要求用戶全局安裝它們。這意味着有些工具像 mochagruntbower,它們曾經主要被全局的安裝在系統上,如今在每個項目的基礎上有了本身的版本控制。也就是說,要使基於 npm 的項目啓動並運行,你須要作的就是確保系統上有 node + npm,而後 npm it 執行 installtest。由於 npm run-script 添加了本地二進制文件到路徑,這剛好起做用!github

反作用是你沒有快速方便的方式去直接取調用本地二進制文件。有幾種方法能夠作到,同時都有些使人惱火:你能夠給你的 scripts 添加腳本,不過你須要記住經過使用 -- 傳遞參數,你能夠用 shel 技巧,像這樣 alias npmx=PATH=$ (npm bin): $PATH,或者你能夠只是手動輸入路徑經過 ./node_modules/.bin/mocha。這些都起做用,可是都不完美。shell

npx 給了你我認爲作好的方案:使用 本地 安裝,$ npx mocha 是你惟一須要作的。若是你有額外的步驟和配置 shell 的自動回調(在這下面更多的狀況),那麼 $ mocha 在項目目錄內部的命令會爲你提供技巧!npm

額外福利,若是調用已經安裝的二進制文件,npx 基本上沒有開銷——它足夠聰明去爲工具直接到當前運行的 node 進程中加載代碼!此類事情都如此快,同時它對於腳原本說是徹底能夠接受的。安全

執行一次性命令

`$ npx create-react-app my-cool-new-app` 安裝了臨時的 creat-react-app 而後調用,沒有污染全局安裝,也沒有要求更多步驟

你曾經遇到過一個狀況是想去試試某個 CLI 工具,可是比較討厭的是不得不在全局安裝只是爲了運行一次嗎?npx 是爲這個而生的。調用 npx <command>,當 <command>還不在你的 $PATH中,將會爲你從 npm 註冊的名字自動安裝包,同時調用它。當它完成,已經安裝的包不會在全局的任何地方,因此你不用擔憂長期污染問題。bash

這個特性對於像生成器而言的東西來講是理想的。像是 yeoman 的工具或者 create-react-app 好久也不會調用一次。這個時候你再運行它們,它們可能已通過期了,因此每次不得不執行安裝,每次你想用任何方式使用它們的時候。app

做爲一個工具維護者,我很喜歡這個特性,由於這意味着我只須要在說明的 README.MD 裏面添加 $ npx my-tool就能夠,而不是試着讓人們客服安裝的困難。老實說,說:「哦,只要拷貝這樣命令,沒有任何問題」對不肯定是否使用工具的用戶而言更好。grunt

這裏有幾個有趣的包,你或許想用 npx 試試:happy-birthdaybenny-hillworkin-hardcowsayyocreate-react-appnpm-check。這有個完整的 awesome-npx 項目!去試試!一條命令能夠獲得一個成熟的本地 REST 服務,麻雀雖小,五臟俱全。

在不一樣的 Node.js 版本下運行命令

npx -p node@<version> node -v 用於在 node 版本下的一次性運行

最終證實,這是一個很酷的註冊在 npm 上的工具包,是由 Aria Stewart 創做的 node。這意味着你可使用不一樣的 node 版本很容易的找出 node 命令的結果,而不須要版本管理工具好比 nvm, nave 或者 n。全部須要作的事,只是安裝 npm@5.2.0

npm 的-p 選項容許你指定安裝包,同時添加到容許 $PATH,這意味着你能夠作如下有趣的事:$ npx -p node@6 npm it 就像是你在全局運行 node@6同樣,去安裝和測試當前 npm 包。我一直在本身使用——甚至最近不得不在項目裏大量使用,因爲個人一些測試庫低於 node@8 後就不運行。它真的是救命神器,並且我發現對於使用場景而言它比版本管理器要容易多了,我老是不知不覺破壞或者丟掉配置。

交互式開發 npm run-scripts

`$ npx -p cowsay -p lolcatjs -c ‘echo 「$npm_package_name@$npm_package_version」 | cowsay | lolcatjs’` 安裝了 cowsay 和 locatjs,而後從運行腳本里訪問大量 `$npm_` 變量。

現在不少 npm 用戶使用 run-script 的特性。它們不只分配 $PATH,好比訪問本地二進制文件,並且還在那些腳本中添加了大量環境變量讓你能夠訪問!你能夠經過 npm run env | grep npm_ 看看那些額外的變量。

這能夠有技巧的開發和測試運行腳本——意味着使用這些技巧像 $(npm bin)/some-bin,直到交互生效,你仍然不能訪問那些魔法般的環境變量。

可是等等!npx 卻另有高招:當你使用 -c 選項,寫進內部字符串的腳本參數將會徹底像一般運行腳本同樣訪問相同的環境變量!你甚至可使用鏈式或者多行命令用一行 npx 完成。

與夥伴分享基於 gist 腳本

使用 gist.github.com 去分享工具類腳本變得很常見,而不是設置整個 git 倉庫,發佈新工具等等。

使用 npx,你能夠作到更深一步:由於 npx 接受npm自己所作的任何特定符,你能夠建立一個 gist,人們能用一行命令直接調用。

本身試試結果: gist.github.com/zkat/4bc195…

注意:保證安全!當執行這些腳本時,確保閱讀過,就像運行 .sh 腳本同樣。

額外好處:shell 自動回退

在 .zshrc 中放置自動回調意味着你能夠作 `$ ember-cli@lastest` 而不用引用一點 npx

這是一個很棒的特性, Félix Saparelli 添加的,由於這對於大多數使用案例,你永遠不須要直接調用 npx!在常規 npx 用法和回調的不一樣在於,回調不安裝新包,除非你使用 pkg@version 語法。

直接設置自動回調:查閱 npx 文檔,爲當前 shell 使用命令,添加 .bashrc/.zshrc/.fishrc,而後重啓你的shell(或者使用 source 或者其餘功能去刷新 shell)。

如今,你能夠作 standard@8--version 這樣的事,去找出不一樣版本,同時若是你在 npm 項目內部,$ mocha 將會自動回調本地安裝的 mocha 版本,提供的版本沒有全局安裝。

現場作作看!

你能夠經過安裝 npm@5.2.0 或者更新的——若是你不想使用 npm,你能夠安裝穩定版的 npx!它徹底兼容其餘包管理器,由於任何包使用只是內部操做。並且這裏有10種不一樣語言,歸功於來自全世界的早期採用,使用 -- help 全部的系統消息翻譯自動基於系統本地語言!這裏有一個 awesome-npx 倉庫,是個用 npx 工做良好的例子!

你有喜歡的特性嗎?有沒有使用過?若是你有一些我沒有在這裏列出來的工具的話,在評論裏分享下!我很高興聽到其餘人的推薦!

pic
相關文章
相關標籤/搜索