npx 使用教程

2022-04-28 22:18:28 字數 2315 閱讀 7265

npm 從5.2版開始,增加了 npx 命令。它有很多用處,本文介紹該命令的主要使用場景。

node 自帶 npm 模組,所以可以直接使用 npx 命令。萬一不能用,就要手動安裝一下。

$ npm install -g 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,所以系統命令也可以呼叫。

//

等同於 ls

$ npx ls

注意,bash 內建的命令不在$path裡面,所以不能用。比如,cd是 bash 命令,因此就不能用npx cd

$ npx [email protected] main.js -o ./dist/main.js

上面**指定使用 3.1.0 版本的uglify-js壓縮指令碼。

某些場景下,這個方法用來切換 node 版本,要比 nvm 那樣的版本管理器方便一些

npx 還可以執行 github 上面的模組原始碼。

// 執行 gist **

$ npx

// 執行倉庫**

$ npx github:piuccio/cowsay hello

注意,遠端**必須是乙個模組,即必須包含package.json和入口指令碼。

-p引數用於指定 npx 所要安裝的模組,所以上一節的命令可以寫成下面這樣。

$ npx -p [email protected] node -v 

上面命令先指定安裝[email protected],然後再執行node -v命令。

-p引數對於需要安裝多個模組的場景很有用。

$ npx -p lolcatjs -p cowsay [command]

如果 npx 安裝多個模組,預設情況下,所執行的命令之中,只有第乙個可執行項會使用 npx 安裝的模組,後面的可執行項還是會交給 shell 解釋。

$ npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'

//報錯

上面**中,cowsay hello | lolcatjs執行時會報錯,原因是第一項cowsay由 npx 解釋,而第二項命令localcatjs由 shell 解釋,但是lolcatjs並沒有全域性安裝,所以報錯。

-c引數可以將所有命令都用 npx 解釋。有了它,下面**就可以正常執行了。

$ npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'

-c引數的另乙個作用,是將環境變數帶入所要執行的命令。舉例來說,npm 提供當前專案的一些環境變數,可以用下面的命令檢視。

$ npm run env | grep npm_

-c引數可以把這些 npm 的環境變數帶入 npx 命令。

$ npx -c 'echo "$npm_package_name"'

上面**會輸出當前專案的專案名。

**:

npx 使用教程

日期 2019年2月 9日 npm 從5.2版開始,增加了npx命令。它有很多用處,本文介紹該命令的主要使用場景。node 自帶 npm 模組,所以可以直接使用npx命令。萬一不能用,就要手動安裝一下。npm install gnpxnpx想要解決的主要問題,就是呼叫專案內部安裝的模組。比如,專案內...

npx 使用教程

npm 從5.2版開始,增加了 npx 命令。它有很多用處,本文介紹該命令的主要使用場景。node 自帶 npm 模組,所以可以直接使用 npx 命令。萬一不能用,就要手動安裝一下。npm install g npxnpx 想要解決的主要問題,就是呼叫專案內部安裝的模組。比如,專案內部安裝了測試工具...

安利超級好用的npx

今天在搭建部落格的時候用到了 hexo 然而第一句話就讓我全域性安裝 hexo npm install g hexo cli,這讓我很是不爽,因為全域性安裝意味著要安裝到你的電腦裡,但是這種八百年都不會用一次的東西,下次隔好久使用的時候又有新版本了,導致又得重新安裝更新,很是麻煩,那麼有沒有可以使用...