用 npx 代替 npm run xxx – 以套件 mocha 為例

Mindy Huang
4 min readMar 1, 2020

--

npx 是什麼?

npx 是 NodeJS 的套件執行器。能在不「顯式安裝」套件的情況下,幫你執行它。

例如:在 terminal 輸入

$ npx create-react-app my-project

即使你沒安裝 create-react-app 套件 ,也能用它建新的 React 專案

為甚麼需要用 npx ?

  1. 你想使用某套件,但因為套件的使用頻率低,或不想佔用電腦儲存空間,因此不想安裝它
  2. 不想花時間設定「npm script(腳本)」

以往我們要調用專案內部的 NodeJS 套件(以 mocha 測試框架為例),必須

  • 安裝套件:npm install mocha
  • package.json 撰寫 npm script
  • 再執行 `npm run test` 做測試。

而 npx 能將上面三個步驟大大簡化 — — 改成在 terminal 輸入一行 $ npx mocha ,就能迅速完成測試!

這樣的模式對於一些只需要執行一次,之後就不再用到的 cli,尤其方便!

究竟 npx 是怎麼辦到的呢?它的原理是什麼?就讓我們繼續看下去~

在 npx 誕生之前 – 先來看 npm script 的原理

在不使用 npx 的情況下,想調用 mocha 執行測試,有兩種方法

方法 1: 安裝 mocha 套件,並在 terminal 輸入:

$ ./node_modules/mocha/bin/mocha

方法 2: 安裝 mocha 套件,並設定 npm script

首先設定 package.json

“scripts”: {
“test”: “mocha”
}

然後執行:$ npm run test

npm script 執行的原理:

npm 會先將 node_modules/.bin 子目錄加入到環境變數 $PATH

執行完 mocha 後,再將 $PATH 變數恢復原樣。
因此,執行 npm run test 等同執行 ./node_modules/.bin/mocha

有了 npx 後

要調用 mocha 執行測試,你只要輸入

$ npx mocha

就可以完成測試。

NodeJS 預設內建 npx 命令,所以不用特別安裝

npx 原理

npx 在執行命令時,會到node_modules/.bin 路徑 和 環境變數 $PATH 裡面,檢查命令是否存在。

  • 如果命令存在,就執行它
  • 如果命令不存在,就試著安裝套件,執行完再移除它

後記

這篇文是因為我在看 react 教學時,發現講師使用了 $ npx create-react-app xxx 來初始化專案,引發我對 npx 的好奇心,把研究結果記錄於此。

參考資源

https://www.ruanyifeng.com/blog/2016/10/npm_scripts.html

--

--