用 npx 代替 npm run xxx – 以套件 mocha 為例
npx 是什麼?
npx 是 NodeJS 的套件執行器。能在不「顯式安裝」套件的情況下,幫你執行它。
例如:在 terminal 輸入
$ npx create-react-app my-project
即使你沒安裝 create-react-app 套件 ,也能用它建新的 React 專案
為甚麼需要用 npx ?
- 你想使用某套件,但因為套件的使用頻率低,或不想佔用電腦儲存空間,因此不想安裝它
- 不想花時間設定「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 的好奇心,把研究結果記錄於此。