輸入npm?run?xxx后執(zhí)行原理深入解析
前言
當我們輸入npm run XXX會首先去package.json文件里找scripts 里找對應(yīng)的xxx,然后執(zhí)行 xxx的命令,例如我下面這個項目輸入npm run dev就會執(zhí)行vue-cli-service serve 這條命令。
package.json文件

那么問題來了:
為什么不直接執(zhí)行vue-cli-service serve而要執(zhí)行npm run serve 呢?
因為 直接執(zhí)行vue-cli-service serve,會報錯,因為操作系統(tǒng)中沒有存在vue-cli-service這一條指令。

那么問題又來了:
為什么執(zhí)行npm run serve的時候,這樣它就能成功,而且不報指令不存在的錯誤呢?
我們在安裝依賴的時候,是通過npm i xxx 來執(zhí)行的,例如 npm i @vue/cli-service,npm 在 安裝這個依賴的時候,就會node_modules/.bin/ 目錄中創(chuàng)建 好vue-cli-service 為名的幾個可執(zhí)行文件了。

.bin 目錄,這個目錄不是任何一個 npm 包。目錄下的文件,表示這是一個個軟鏈接,打開文件可以看到文件頂部寫著 #!/bin/sh ,表示這是一個腳本。
由此我們可以知道,當使用 npm run serve 執(zhí)行 vue-cli-service serve 時,雖然沒有安裝 vue-cli-service的全局命令,但是 npm 會到 ./node_modules/.bin 中找到 vue-cli-service 文件作為 腳本來執(zhí)行,則相當于執(zhí)行了 ./node_modules/.bin/vue-cli-service serve(最后的 serve 作為參數(shù)傳入)。

總結(jié)
- 運行 npm run xxx的時候,npm 會先在當前目錄的 node_modules/.bin 查找要執(zhí)行的程序,如果找到則運行;
- 沒有找到則從全局的 node_modules/.bin 中查找,npm i -g xxx就是安裝到到全局目錄;
- 如果全局目錄還是沒找到,那么就從 path 環(huán)境變量中查找有沒有其他同名的可執(zhí)行程序。
參考 http://www.dhdzp.com/article/254116.htm
以上就是輸入npm run xxx后執(zhí)行原理深入解析的詳細內(nèi)容,更多關(guān)于npm run xxx執(zhí)行原理的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文帶你掌握JavaScript中Moment.js如何操作日期和時間
Moment.js是一個極其強大的JavaScript庫,專門用于解析、驗證、操作和顯示日期和時間,下面就跟隨小編一起學(xué)習(xí)一下Moment.js的具體使用吧2024-01-01
JavaScript必知必會(十) call apply bind的用法說明
這篇文章主要介紹了JavaScript必知必會(十) call apply bind的用法說明 的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06
微信小程序監(jiān)聽用戶登錄事件的實現(xiàn)方法
這篇文章主要介紹了微信小程序監(jiān)聽用戶登錄事件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
移動端H5開發(fā) Turn.js實現(xiàn)很棒的翻書效果
這篇文章主要為大家詳細介紹了Turn.js實現(xiàn)很棒的翻書效果,對Turn.js翻書效果的實現(xiàn)進行總結(jié),感興趣的小伙伴們可以參考一下2016-06-06
echarts自定義餅圖數(shù)據(jù)刷新和顏色渲染問題淺析
這篇文章主要給大家介紹了關(guān)于echarts自定義餅圖數(shù)據(jù)刷新和顏色渲染問題的相關(guān)資料,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,需要的朋友可以參考下2023-05-05
根據(jù)身份證號自動輸出相關(guān)信息(籍貫,出身日期,性別)
為了減少客戶的在頁面的輸入,做了這個效果,他可以根據(jù)用戶輸入的身份證號輸出籍貫、出身日期、性別的相關(guān)信息,需要的朋友可以參考下2013-11-11

