這個是在 npmv5.2.0
引入的一條命令(查看),引入這個命令的目的是為了提升開發者使用包內提供的命令行工具的體驗。
為什么引入這個命令
舉個例子,我們開發中要運行 parcel 命令來打包:parcel index.html
,以前有這么幾種方式:
- 全局安裝 parcel,但有時不同項目使用不同版本,不允許使用全局包,只能考慮下面一些方法
- 使用 npm scripts,在 package.json 加一個 script
"scripts": { "start": "parcel index.html" }
然后執行 npm run start
- 將 node_modules 的可執行目錄(.bin)加到 PATH 中
alias npmx=PATH=$(npm bin):$PATH
然后執行 npmx parcel index.html
- 指定可執行命令路徑
./node_modules/.bin/parcel index.html
現在我們有了 npx
命令,就不在需要考慮以上方法了(其實npx
是對方法 3 的封裝)。當我們執行 npx parcel index.html
時,會自動去./node_modules/.bin
目錄下搜索。
npx
還允許我們單次執行命令而不需要安裝,例如:
npx create-react-app my-cool-new-app
這條命令會臨時安裝 create-react-app 包,命令完成后 create-react-app 會刪掉,不會出現在 global 中。下次再執行,還是會重新臨時安裝。
npx命令找包順序:先自動查找當前依賴包中的可執行文件,如果找不到,就會去 PATH 里找。如果依然找不到,就會幫你臨時安裝,執行完后再刪除包。
特點:
- 臨時安裝可執行依賴包,不用全局安裝,不用擔心長期的污染。
- 可以執行依賴包中的命令,安裝完成自動運行。
- 自動加載node_modules中依賴包,不用指定$PATH。
- 可以指定node版本、命令的版本,解決了不同項目使用不同版本的命令的問題。