今天想學習一下react,打開例子執行代碼:
npx create-react-app my-app
上面代碼中出現了npx命令,第一次見這個命令,嚇得我趕緊去百度了一下這是什么命令:
npm 從5.2版開始,增加了 npx 命令。Node 自帶 npm 模塊,所以可以直接使用 npx 命令。
調用項目安裝的模塊
npx 想要解決的主要問題,就是調用項目內部安裝的模塊。比如,項目內部安裝了測試工具 Mocha。
$ npm install -D mocha
一般來說,調用 Mocha ,只能在項目腳本和 package.json 的scripts字段里面, 如果想在命令行下調用,必須像下面這樣。
# 項目的根目錄下執行
$ node-modules/.bin/mocha --version
npx 就是想解決這個問題,讓項目內部安裝的模塊用起來更方便,只要像下面這樣調用就行了。
$ npx mocha --version
npx 的原理很簡單,就是運行的時候,會到node_modules/.bin路徑和環境變量$PATH里面,檢查命令是否存在。
由於 npx 會檢查環境變量$PATH,所以系統命令也可以調用。
避免全局安裝模塊
除了調用項目內部模塊,npx 還能避免全局安裝的模塊。比如,create-react-app這個模塊是全局安裝,npx 可以運行它,而且不進行全局安裝。
$ npx create-react-app my-react-app
上面代碼運行時,npx 將create-react-app下載到一個臨時目錄,使用以后再刪除。所以,以后再次執行上面的命令,會重新下載create-react-app。
下載全局模塊時,npx 允許指定版本。
$ npx uglify-js@3.1.0 main.js -o ./dist/main.js
上面代碼指定使用 3.1.0 版本的uglify-js壓縮腳本。
注意,只要 npx 后面的模塊無法在本地發現,就會下載同名模塊。比如,本地沒有安裝http-server模塊,下面的命令會自動下載該模塊,在當前目錄啟動一個 Web 服務。
$ npx http-server
還有其他幾種用法現在暫時沒用到,就先不寫了。