npm@5.2 加入的利器 - npx

伴隨 Node.js 8.x 的面世,npm 也跟著進到 5.x 的版本了。之前被許多開發者詬病的速度問題,看來因為 yarn 也讓 npm 開始大刀闊斧地更新了,有關 5.x 的新特性可以參考前文。(不過老實說 5.x 還是存有許多的問題,希望能在 Node.js 8.x 接續成為下一個 LTS 之時,npm 也能穩定下來)

不過本文要提的是 npm@5.2 加入的一個新指令 - npx

Introducing npx: an npm package runner

目前 npm 主要的開發者 - kat 有特別寫了一篇文章介紹這個新工具,沒有英文苦手的話建議閱讀,會對這個新工具有更深入的了解。

就像文章標題寫的 npm package runner,這個新工具就是來執行透過 npm 安裝的套件,但是透過它可以很簡單的達成一些開發常見的需求,譬如…

執行 node_modules 下安裝套件的指令

這類的套件大家應該都很熟悉,像 build tool 或是 unit test,之前要嘛是得在全域下安裝 npm i -g webpack 要不就是在 packages.json 裡面用 run scripts 指定(或其他招數)

"scripts": {
  "test": "./node_modules/.bin/mocha test/*.js"
}

但是現在只要一個簡單的 npx mocha 就夠了,而且它也支援參數。

不需要再裝 npm install -g

npm 上的套件,有些是偶一為之才會用到,譬如眾多的 generator(yeomon, create-react-app, express-generator 之流),現在有了 npx 你就不需要再安裝這類的套件了,就只要 npx express-generator -h

如果你想一次跑多個套件,就記得用 -p 搭配 -c 就可以把命令組合起來

// try it!
npx -p cowsay -p happy-birthday -c 'happy-birthday -u Ferrari | cowsay'

auto fallback

是不是常常遇到執行的時候發現模組沒裝,噴錯誤之後再安裝的情境呢?npx 支援各 shell script 下的 auto fallback,遇到找不到(沒安裝)的時候就自動調用 npx。

是不是解決了很多之前不太方便的情況了,快試試 npm@5 吧 ;)