解決多年疑惑。
為什麼用 npm run 或 npx 就可以執行?
(這裡以 jest 來舉例)
在執行 jest
指令的時候你可能會用以下幾種方式:
- 直接在 terminal 上執行 jest 指令
- 透過 package.json 的
srcipt
執行npm run xxx
- 透過
npx jest xxx
如果是 2、3 的話都沒問題,但 1 的話你應該會直接得到錯誤:
主要是因為:指令的儲存位置
以這個例子來說,jest
是安裝在「專案底下」,而不是安裝在「全域」的電腦系統裡。
在 terminal 上執行 jest 指令時,它會到系統裡面去找有沒有 jest
這個指令?但因為它找不到,所以最後就會噴 error。
而 npm srcipt
跟 npx jest
指令可以正常執行,是因為它們都會自動到專案底下去找有沒有你輸入的這個指令,也就是 jest
。最後有找到,所以順利執行。
簡單來說,一個是「從系統裡面找」,一個是從「專案裡面找」,只是這樣的差異而已。