vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)圖文詳解
一、啟動(dòng)開(kāi)發(fā)服務(wù)器、調(diào)用“工具鏈”、編譯、并運(yùn)行當(dāng)前工程
npm run serve
該命令的配置文件在當(dāng)前工程的package.json文件中,隨@vue/cli腳手架驅(qū)動(dòng)產(chǎn)生的vue的工程默認(rèn)自動(dòng)生成:
(圖1)
(圖2)
二、npm run serve內(nèi)部原理分析
打開(kāi)“工程”下的node包依賴路徑下的“可執(zhí)行腳本”目錄:node_modules\bin
(圖3)
如 圖3 所示,vue-cli-service.cmd文件,即 圖1 所運(yùn)行的實(shí)際腳本,運(yùn)行其命令行幫助:
(圖4)
得知其需要1些選項(xiàng)來(lái)執(zhí)行命令( 如 圖4 所示):
(圖5)
分別打開(kāi) 圖5 所示的兩個(gè)文件,得知vue-cli-service.cmd需要帶1個(gè)“選項(xiàng)參數(shù)”來(lái)執(zhí)行內(nèi)部命令( 如 圖6、圖7 所示):
(圖6)
(圖7)
通過(guò)分析 vue-cli-service.js 源碼:
(圖8)
得知,“選項(xiàng)參數(shù)” 的別名,分別為 build、 serve 、inspect :
#!/usr/bin/env node const { semver, error } = require('@vue/cli-shared-utils') const requiredVersion = require('../package.json').engines.node if (!semver.satisfies(process.version, requiredVersion, { includePrerelease: true })) { error( `You are using Node ${process.version}, but vue-cli-service ` + `requires Node ${requiredVersion}.\nPlease upgrade your Node version.` ) process.exit(1) } const Service = require('../lib/Service') const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd()) const rawArgv = process.argv.slice(2) const args = require('minimist')(rawArgv, { boolean: [ // build 'modern', 'report', 'report-json', 'inline-vue', 'watch', // serve 'open', 'copy', 'https', // inspect 'verbose' ] }) const command = args._[0] service.run(command, args, rawArgv).catch(err => { error(err) process.exit(1) })
因而,開(kāi)發(fā)環(huán)境,npm run serve 的原生CLI命令行腳本為:
node .\node_modules\@vue\cli-service\bin\vue-cli-service.js serve
同理,生產(chǎn)環(huán)境,進(jìn)行分發(fā)時(shí),npm run build 的原生CLI命令行腳本為:
node .\node_modules\@vue\cli-service\bin\vue-cli-service.js build
三、vue編譯運(yùn)行過(guò)程
npm run serve、npm run build等“調(diào)試運(yùn)行腳本”:僅僅是Vue默認(rèn)在內(nèi)部做了1個(gè)“命令行”封裝而已!以包配置文件(package.json)的形式與用戶交互。
# 過(guò)程大致如此: # INFO Starting development server... # node調(diào)用各個(gè)相關(guān)模塊并運(yùn)行: node.exe # vue內(nèi)置webpack開(kāi)始啟動(dòng)開(kāi)發(fā)服務(wù)器webpack-dev-server : .\node_modules\webpack-dev-server\client\index.js?http://192.168.3.242:8081&sockPath=/sockjs-node .\node_modules\webpack\hot\dev-server.js .\node_modules\webpack-dev-server\client\index.js?http://192.168.3.242:8081&sockPath=/ # vue內(nèi)置webpack調(diào)用cache-loader和babel-loader解析代碼進(jìn)行語(yǔ)法分析、依賴分析: .\node_modules\cache-loader\dist\cjs.js??ref--13-0! .\node_modules\babel-loader\lib\index.js! # ........... # vue-loader加載器啟動(dòng)選項(xiàng): .\node_modules\vue-loader\lib\index.js??vue-loader-options! # 對(duì)你的工程中的文件進(jìn)行語(yǔ)法及依賴分析: .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=te .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\A .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=tem .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avat .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\A .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avat .\node_modules\babel-loader\lib\index.js .\node_modules\cache-loader\dist\cjs.js??ref--13-0! # ........... # vue-loader開(kāi)始調(diào)用index.js處理你的工程中的文件: .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=te .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=tem .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=tem .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=style&index=0&id= .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=style&index=0&id= .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\App.vue?vue&type=style&index=0&id= .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d .\node_modules\vue-loader\lib\index.js??vue-loader-options!.\src\components\Avatar.vue?vue&type=style&index=0&id=5811d # 完成“構(gòu)建”并啟動(dòng)應(yīng)用: # 98% after emitting CopyPlugin # DONE Compiled successfully in 5177ms 上午4:56:59 # App running at: # - Local: http://localhost:8081/ # - Network: http://192.168.3.242:8081/ # # Note that the development build is not optimized. # To create a production build, run npm run build.
總結(jié)
到此這篇關(guān)于vue執(zhí)行配置選項(xiàng)npm run serve的本質(zhì)的文章就介紹到這了,更多相關(guān)vue執(zhí)行配置選項(xiàng)npm run serve內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決vue項(xiàng)目運(yùn)行npm run serve報(bào)錯(cuò)的問(wèn)題
- vue3.0運(yùn)行npm run dev報(bào)錯(cuò)Cannot find module node:url
- 使用vue-cli初始化項(xiàng)目時(shí)運(yùn)行‘npm run dev’報(bào)錯(cuò)及解決
- 詳解vuejs中執(zhí)行npm run dev出現(xiàn)頁(yè)面cannot GET/問(wèn)題
- 關(guān)于vue的npm run dev和npm run build的區(qū)別介紹
- 詳解Vue項(xiàng)目在其他電腦npm run dev運(yùn)行報(bào)錯(cuò)的解決方法
- Vue項(xiàng)目npm操作npm run serve或npm run dev報(bào)錯(cuò)及二者的區(qū)別
相關(guān)文章
基于Vue設(shè)計(jì)實(shí)現(xiàn)一個(gè)彈幕組件
這篇文章主要給大家分享一個(gè)開(kāi)發(fā)中常見(jiàn)的需求,接下來(lái)將為大家詳細(xì)介紹彈幕的實(shí)現(xiàn)以及設(shè)計(jì)思路一步一步描述出來(lái),希望大家能夠喜歡2023-06-06Vue.Draggable使用文檔超詳細(xì)總結(jié)
Vue拖拽組件(Draggable)是一個(gè)允許與View-Model同步進(jìn)行拖放排序的Vue組件,下面這篇文章主要給大家介紹了關(guān)于Vue.Draggable使用文檔的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08vue中el-table多層級(jí)嵌套的具體實(shí)現(xiàn)
本文主要介紹了vue中el-table多層級(jí)嵌套的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10關(guān)于vue.js v-bind 的一些理解和思考
本篇文章主要介紹了關(guān)于vue.js v-bind 的一些理解和思考,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06vue如何監(jiān)聽(tīng)瀏覽器主動(dòng)刷新
這篇文章主要介紹了vue如何監(jiān)聽(tīng)瀏覽器主動(dòng)刷新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04Vue v-for中:key中item.id與Index使用的區(qū)別解析
這篇文章主要介紹了Vue v-for中:key中item.id與Index使用的區(qū)別解析,推薦使用【:key="item.id"】而不是將數(shù)組下標(biāo)當(dāng)做唯一標(biāo)識(shí),前者能做到全部復(fù)用,本文給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧2024-02-02詳解Vue+Element的動(dòng)態(tài)表單,動(dòng)態(tài)表格(后端發(fā)送配置,前端動(dòng)態(tài)生成)
這篇文章主要介紹了Vue+Element動(dòng)態(tài)表單動(dòng)態(tài)表格,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04