亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

前端面試之輸入npm?run后執(zhí)行原理

 更新時(shí)間:2022年07月05日 10:05:18   作者:小胖子學(xué)習(xí)筆記  
這篇文章主要為大家介紹了前端面試之輸入npm?run后發(fā)生了什么及執(zhí)行原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在前端開(kāi)發(fā)的工作當(dāng)中,使用 npm run dev 的命令啟動(dòng)本地開(kāi)發(fā)環(huán)境,是再正常不過(guò)的事了。那么,當(dāng)輸入完類(lèi)似 npm run xxx 的命令后,究竟是如何觸發(fā)各種構(gòu)建工具的構(gòu)建命令以及啟動(dòng) Node 服務(wù)等功能的呢?

首先我們知道,Node 作為 JavaScript 的運(yùn)行時(shí),可以把 .js 文件當(dāng)做腳本來(lái)運(yùn)行,像這種:

node index.js

當(dāng)我們使用 npm 來(lái)管理項(xiàng)目(或者 yarn)時(shí),會(huì)在根目錄下生成一個(gè) package.json 文件,其中的 scripts 屬性,就是用于配置 npm run xxx 命令的,比如我有如下配置:

// package.json
{
  // ...
  "scripts": {
    "start": "node ./src/index.js",
    "build": "react-scripts build",
  },
  // ...
}

當(dāng)執(zhí)行 npm start 時(shí),對(duì)于 npm 來(lái)說(shuō),相當(dāng)于執(zhí)行 npm run start ,則映射為 scripts 屬性下的 start 命令,即

npm start
# 相當(dāng)于
npm run start
# 相當(dāng)于
node ./src/index.js

這個(gè)比較好理解,就是直接使用全局安裝的 Node 命令來(lái)執(zhí)行了 ./src 目錄下的 index.js 文件而已。

如上面類(lèi)似,執(zhí)行 npm run build 即相當(dāng)于執(zhí)行 react-scripts build 命令。這個(gè)命令,是使用 create-react-app 搭建 React 項(xiàng)目時(shí)默認(rèn)配置的。與 Node 不同,react-scripts 并沒(méi)有全局安裝,怎么就能直接執(zhí)行呢?

這時(shí)我們不妨看一下,使用 create-react-app 搭建的項(xiàng)目(使用 vue-cli 搭建的項(xiàng)目也一樣),在 npm install 后,其 node_modules 目錄下面的樣子:

如圖可以看到有一個(gè) .bin 目錄,這個(gè)目錄不是任何一個(gè) npm 包。目錄下的文件,右面都有一個(gè)小箭頭(VS Code 上這樣顯示),表示這是一個(gè)軟鏈接,打開(kāi)文件可以看到文件頂部寫(xiě)著 #!/user/bin/env node ,表示這是一個(gè)通過(guò)使用 Node 執(zhí)行的腳本。

由此我們可以知道,當(dāng)使用 npm run build 執(zhí)行 react-scripts build 時(shí),雖然沒(méi)有安裝 react-scripts 的全局命令,但是 npm 會(huì)到 ./node_modules/.bin 中找到 react-scripts.js 文件作為 Node 腳本來(lái)執(zhí)行,則相當(dāng)于執(zhí)行了 ./node_modules/.bin/react-scripts build(最后的 build 作為參數(shù)傳入)。

npm run build
# 相當(dāng)于
./node_modules/.bin/react-scripts build

前面說(shuō)過(guò),react-scripts 是一個(gè)軟鏈接,那么它的指向是哪里,又是怎么來(lái)的呢?

我們可以在 node_modules 目錄下,直接找到 react-scripts 包,查看其目錄結(jié)構(gòu)和 package.json 如下:

package.json 中可知,這個(gè)包將 ./bin/react-scripts.js 作為 bin 聲明了。所以在 npm install 時(shí),npm 讀到該配置后,就將該文件軟鏈接到 ./node_modules/.bin 目錄下,而 npm 還會(huì)自動(dòng)把node_modules/.bin加入$PATH,這樣就可以直接作為命令運(yùn)行依賴程序和開(kāi)發(fā)依賴程序,不用全局安裝了。

假如我們?cè)诎惭b包時(shí),使用 npm install -g xxx 來(lái)安裝,那么會(huì)將其中的 bin 文件加入到全局,比如 create-react-appvue-cli ,在全局安裝后,就可以直接使用如 vue-cli projectName 這樣的命令來(lái)創(chuàng)建項(xiàng)目了。

以上就是前端面試之輸入npm run后執(zhí)行原理的詳細(xì)內(nèi)容,更多關(guān)于npm run執(zhí)行原理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法

    Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法

    這篇文章介紹了Node.js數(shù)據(jù)流Stream之Duplex流和Transform流的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • nodejs+express實(shí)現(xiàn)文件上傳下載管理網(wǎng)站

    nodejs+express實(shí)現(xiàn)文件上傳下載管理網(wǎng)站

    這篇文章主要為大家詳細(xì)介紹了nodejs+express實(shí)現(xiàn)文件上傳下載管理的網(wǎng)站,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 在nodeJs中如何修改json文件中的數(shù)據(jù)

    在nodeJs中如何修改json文件中的數(shù)據(jù)

    這篇文章主要介紹了在nodeJs中如何修改json文件中的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Node.js中的HTTP模塊與URL模塊

    Node.js中的HTTP模塊與URL模塊

    這篇文章介紹了Node.js中的HTTP模塊與URL模塊,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • VsCode無(wú)法識(shí)別node問(wèn)題解決過(guò)程

    VsCode無(wú)法識(shí)別node問(wèn)題解決過(guò)程

    這篇文章主要給大家介紹了關(guān)于VsCode無(wú)法識(shí)別node問(wèn)題解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Node.js?操作本地文件及深入了解fs內(nèi)置模塊

    Node.js?操作本地文件及深入了解fs內(nèi)置模塊

    這篇文章主要介紹了Node.js?操作本地文件及深入了解fs內(nèi)置模塊,node.js作為服務(wù)端應(yīng)用,肯定少不了對(duì)本地文件的操作,像創(chuàng)建一個(gè)目錄、創(chuàng)建一個(gè)文件、讀取文件內(nèi)容等都是我們開(kāi)發(fā)中經(jīng)常需要用到的功能
    2022-09-09
  • Node綁定全局TraceID的實(shí)現(xiàn)方法

    Node綁定全局TraceID的實(shí)現(xiàn)方法

    這篇文章主要介紹了Node 綁定全局 TraceID的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Node.js實(shí)現(xiàn)斷點(diǎn)續(xù)傳

    Node.js實(shí)現(xiàn)斷點(diǎn)續(xù)傳

    上傳圖片、Excel等,畢竟幾M的大小可以很快就上傳到服務(wù)器。 針對(duì)于上傳視頻等大文件幾百M(fèi)或者幾G的大小,就需要等待比較長(zhǎng)的時(shí)間。這就產(chǎn)生了對(duì)應(yīng)的解決方法,對(duì)于大文件上傳時(shí)的暫停、斷網(wǎng)、網(wǎng)絡(luò)較差的情況下, 使用切片+斷點(diǎn)續(xù)傳就能夠很好的應(yīng)對(duì)上述的情況
    2021-06-06
  • 使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    任務(wù)(Tasks)是grunt的核心概念,你所做的很多工作比如資源合并(concat)、壓縮(uglify)都是在配置任務(wù)。 每次grunt運(yùn)行的時(shí)候,你指定的一個(gè)或多個(gè)任務(wù)也在運(yùn)行,如果你沒(méi)有指定任務(wù),那么一個(gè)默認(rèn)名為“default”的任務(wù)將自動(dòng)運(yùn)行。
    2014-06-06
  • 詳解Nodejs get獲取遠(yuǎn)程服務(wù)器接口數(shù)據(jù)

    詳解Nodejs get獲取遠(yuǎn)程服務(wù)器接口數(shù)據(jù)

    這篇文章主要介紹了Nodejs get獲取遠(yuǎn)程服務(wù)器接口數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論