npx: npm 5.2.0 內(nèi)置的包執(zhí)行器
npx: npm 5.2.0 內(nèi)置的包執(zhí)行器 概括自 Introducing npx: an npm package runner 一文,詳細(xì)內(nèi)容請(qǐng)查看原文。
近日發(fā)布的 npm 5.2.0 版本中內(nèi)置了伴生命令:npx,類似于 npm 簡(jiǎn)化了項(xiàng)目開(kāi)發(fā)中的依賴安裝與管理,該工具致力于提升開(kāi)發(fā)者使用包提供的命令行的體驗(yàn)。npx 允許我們使用本地安裝的命令行工具而不需要再定義 npm run-script,并且允許我們僅執(zhí)行一次腳本而不需要再將其實(shí)際安裝到本地;同時(shí) npx 還允許我們以不同的 node 版本來(lái)運(yùn)行指定命令、允許我們交互式地開(kāi)發(fā) node 命令行工具以及便捷地安裝來(lái)自于 gist 的腳本。
在傳統(tǒng)的命令執(zhí)行中,我們需要將工具添加到 package.json 的 scripts 配置中,這種方式還需要我們以 -- 方式傳遞參數(shù);我們也可以使用 alias npmx=PATH=$(npm bin):$PATH, 或者 ./node_modules/.bin/mocha 方式來(lái)執(zhí)行命令,雖然都能達(dá)到目標(biāo),但不免繁雜了許多。而 npx 允許我們以 npx mocha 這樣的方式直接運(yùn)行本地安裝的 mocha 命令。
完整的 npx 命令提示如下:
- 從 npm 的可執(zhí)行包執(zhí)行命令
- npx [選項(xiàng)] <命令>[@版本] [命令的參數(shù)]...
- npx [選項(xiàng)] [-p|--package <包>]... <命令> [命令的參數(shù)]...
- npx [選項(xiàng)] -c '<命令的字符串>'
- npx --shell-auto-fallback [命令行解釋器]
- 選項(xiàng):
- --package, -p 包安裝的路徑 [字符串]
- --cache npm 緩存路徑 [字符串]
- --install 如果有包缺失,跳過(guò)安裝 [布爾] [默認(rèn)值: true]
- --userconfig 當(dāng)前用戶的 npmrc 路徑 [字符串]
- --call, -c 像執(zhí)行 `npm run-script` 一樣執(zhí)行一個(gè)字符串 [字符串]
- --shell, -s 執(zhí)行命令用到的解釋器,可選 [字符串] [默認(rèn)值: false]
- --shell-auto-fallback 產(chǎn)生“找不到命令”的錯(cuò)誤碼
- [字符串] [可選值: "", "bash", "fish", "zsh"]
- --ignore-existing 忽略 $PATH 或工程里已有的可執(zhí)行文件,這會(huì)強(qiáng)制使 npx
- 臨時(shí)安裝一次,并且使用其***的版本 [布爾]
- --quiet, -q 隱藏 npx 的輸出,子命令不會(huì)受到影響 [布爾]
- --npm 為了執(zhí)行內(nèi)部操作的 npm 可執(zhí)行文件 [字符串] [默認(rèn)值:
- "/Users/apple/.nvm/versions/node/v8.1.3/lib/node_modules/npm/bin/npm-cli.js"]
- --version, -v 顯示版本號(hào) [布爾]
- --help, -h 顯示幫助信息 [布爾]
npx 還允許我們單次執(zhí)行命令而不需要安裝;在某些場(chǎng)景下有可能我們安裝了某個(gè)全局命令行工具之后一直忘了更新,導(dǎo)致以后使用的時(shí)候誤用了老版本。而使用 npx create-react-app my-cool-new-app 來(lái)執(zhí)行 create-react-app 命令時(shí),它會(huì)正常地幫我們創(chuàng)建 React 應(yīng)用而不會(huì)實(shí)際安裝 create-react-app 命令行。
我們還可以使用類似于 $ npx -p node-bin@6 npm it 的格式來(lái)指定 Node 版本,或者使用 npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 方式直接運(yùn)行來(lái)自于 Gist 的腳本。
【本文是51CTO專欄作者“張梓雄 ”的原創(chuàng)文章,如需轉(zhuǎn)載請(qǐng)通過(guò)51CTO與作者聯(lián)系】