NPM

npm 是一個node package installer commander tool。

在安裝了node.js環境下可以通過npm i xxx 來安裝你需要的node package到本地或者全局。

npm i webpack -G //全局安裝,路徑為 /usr/local/bin

npm i webpack -S -D //本地安裝, 安裝路徑為 ./node-modules/.bin/

NPX

npx會在安裝npm的時候一起安裝到本地。npx有兩個應用場景:

1、在沒有安裝package的情況下可以使用npx來運行,例如:

npx react-create-app init 
// 會使用npm registry裏面的react-create-app創建一個react app在本地,如果用npm的話需要先install
npx webpack-dev-server --config webpack.dev.js 
// 在沒有全局安裝webpack-dev-server 的時候,直接在命令行運行該包的命令是找不到的,會提示:
bash: webpack-dev-server: command not find

總結:

npm是一個node package安裝工具。
npx的作用是先檢查本地有沒有安裝某個package,如果沒有去遠程registry找,找到的話直接使用,不用下載到本地node-modules包裏面,這樣就能優化本地項目的大小,也可以避免安裝package到全局。

來自轉載鏈接:https://www.jianshu.com/p/50ce356e514a


npx用來解決全局命令行工具只能有一個的問題。
比如裝個webpack,使用的是4.x,可是已經裝了全局的1.x版本並且還要繼續使用,這個時候可以不裝在全局,用npx webpack代替webpack命令,互不干擾。
並且推薦這麼使用。

npx是npm後來加的一個功能,不是同一種東西。當執行npx xxx的時候,npx先看xxxz在$PATH裏有沒有,如果沒有,找當前目錄的node_modules裏有沒有,如果還是沒有,就安裝這個xxx 來執行。 npx也可以理解為少些package.json裏一個script而誕生的。

例如,如果運行npx some-package --no-install,意味着告訴npx ,它應該僅執行。some-package,如果之前未安裝,則不安裝。

示例:假設有一個名為my-package的軟件包,想要執行它。若沒有npx,要執行一個軟件包,必須通過其本地路徑運行來完成,如下所示:

./node_modules/.bin/my-package

或在 package.json文件的 scripts 中將其定義為單獨的腳本,如下所示:

{
  "name":"XXX",
  "version": "1.0.0",
  "scripts": {
    "my-package":"./node_modules/.bin/my-package"
  }
}

然後使用npm run my-package運行。

現在,運用npx,只需運行npx my-package.,即可輕鬆實現此目的。