npx 入門使用
- 2019 年 11 月 8 日
- 筆記
今天在使用的 Gulp 時看到首頁的一段命令:
... $ npx -p touch nodetouch gulpfile.js ...
npx 是個啥?決定一探究竟。
調用項目安裝的模組
npx
是 npm 的自帶模組,可以直接使用,手動安裝為:
$ npm install -g npx
npx
– execute npm package binaries. 它解決的問題是:更方便的從本地 node_modules/.bin
或中央快取中執行命令。
比如項目安裝了 gulp
需要執行命令時需要:
$ node_modules/.bin/gulp -v
如果使用 npx
只需要:
$ npx gulp -v
npx
的原理很簡單,就是運行的時候,會到 node_modules/.bin
路徑和環境變數 $PATH
裡面,檢查命令是否存在。由於 npx
會檢查環境變數 $PATH
,所以系統命令也可以調用。
# 等同於 ls $ npx ls
注意,Bash
內置的命令不在 $PATH
裡面,所以不能用。比如,cd
是 Bash
命令,因此就不能用 npx cd
。
避免全局安裝模組
create-react-app
這個模組是全局安裝,npx
可以運行它,而且不進行全局安裝:
$ npx create-react-app my-react-app
上面程式碼運行時,npx
將 create-react-app
下載到一個臨時目錄,使用以後再刪除。以後再次執行上面的命令,會重新下載 create-react-app
。
注意,只要 npx
後面的模組無法在本地發現,就會下載同名模組。比如,本地沒有安裝 http-server
模組,下面的命令會自動下載該模組,在當前目錄啟動一個 Web 服務。
$ npx http-server
--no-install
和 --ignore-existing
參數
如果想讓 npx
強制使用本地模組,不下載遠程模組,可以使用 --no-install
參數。如果本地不存在該模組,就會報錯。
$ npx --no-install http-server
反過來,如果忽略本地的同名模組,強制安裝使用遠程模組,可以使用 --ignore-existing
參數。
使用不同版本的 Node
可以指定某個版本的 Node
運行腳本,某些場景下,這個方法用來切換 Node
版本,要比 nvm
那樣的版本管理器方便一些。
$ npx [email protected] -v v0.12.8
-p
參數
-p
參數用於指定 npx
所要安裝的模組,所以上一節的命令可以寫成下面這樣。
$ npx -p [email protected] node -v v0.12.8
上面命令先指定安裝 `[email protected],然後再執行
node -v` 命令。
所以開頭時的疑問 $ npx -p touch nodetouch gulpfile.js
也就解答了,就是先安裝 touch
在執行 nodetouch gulpfile.js
。
執行 GitHub 源碼
# 執行 Gist 程式碼 $ npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 # 執行倉庫程式碼 $ npx github:piuccio/cowsay hellos
注意,遠程程式碼必須是一個模組,即必須包含 package.json
和入口腳本。
References:
– EOF –