vue項(xiàng)目啟動(dòng)命令個(gè)人學(xué)習(xí)記錄
一、前言
最近在看vue框架,發(fā)現(xiàn)啟動(dòng)命令邏輯比較復(fù)雜,在這里總結(jié)一波。
注意,下面的總結(jié)以本人的項(xiàng)目為例,不同項(xiàng)目可能細(xì)節(jié)不同,僅供參考。
二、啟動(dòng)命令詳解
1.項(xiàng)目啟動(dòng)前,需要先裝好nodejs,并用npm install安裝好依賴。
2.本人的項(xiàng)目中,vue啟動(dòng)命令為:
npm run compile
其中,npm run xxx會(huì)執(zhí)行package.json中配置的命令,例如package.json中,有:
"scripts": { "compile": "cross-env SERVER_ENV=test node build/dev-server.js", },
所以實(shí)際執(zhí)行的會(huì)是cross-env SERVER_ENV=test node build/dev-server.js命令。
3.cross-env命令,作用是實(shí)現(xiàn)跨平臺(tái)配置環(huán)境變量,SERVER_ENV=test就是自己配置的一個(gè)環(huán)境變量,后續(xù)js等文件會(huì)用到。
(就是windows和linux都可以用 cross-env key=value 來配置環(huán)境變量的意思)
4.node命令,可以執(zhí)行js文件,所以node build/dev-server.js實(shí)際執(zhí)行的就是項(xiàng)目根目錄/build/dev-server.js文件。
(因?yàn)槭窃陧?xiàng)目根目錄執(zhí)行的npm run compile命令,所以build/dev-server.js就是從項(xiàng)目根目錄開始的;其中dev-server.js是自己編寫的一個(gè)js文件)
5.dev-server.js文件中,有:
//這個(gè)會(huì)打印test,上面配置的環(huán)境變量 console.log("env1",process.env.SERVER_ENV) //這個(gè)會(huì)打印prod,因?yàn)闆]有配置ENV1 console.log("env2",`"${process.env.SERVER_ENV1 || 'prod'}"`) //這個(gè)會(huì)打印test,上面配置的環(huán)境變量 console.log("env3",`"${process.env.SERVER_ENV || 'prod'}"`) const config = require('../config') //這個(gè)打印內(nèi)容 console.log("config",config)
這個(gè)的意思是,聲明一個(gè)變量config,內(nèi)容是當(dāng)前js文件的、上一個(gè)目錄中的、config文件夾中的index.js文件。(自己編寫的index.js文件)
注意,只讀取文件夾下的index.js文件,不讀取其它js文件。
6.config/index.js文件中,有:
//這個(gè)是讀取node_modules的path依賴,解析路徑用的(類似jar包) const path = require('path') //這個(gè)是讀取同級(jí)目錄下的test.js文件 const testEnv = require('./test') module.exports = { test: { env: testEnv, port: 10001, assetsSubDirectory: 'static', assetsPublicPath: process.env.SERVER_ENV === 'test' ? '/sub-path-test/' : '/sub-path/', proxyTable: { api: { filter: '/sub-path-test/**', changeOrigin: true, target, onProxyReq(proxyReq) { proxyReq.setHeader( 'Cookie', `SESSION=6b7c231d-1133-40cf-c566-332f6dtxfa72` ) }, }, }, }, }
這個(gè)文件中,因?yàn)橛衜odule.exports,所以第5步中可以require到。
這個(gè)文件中,有個(gè)變量testEnv,配置到了module.exports的json串中,它的值下面會(huì)寫。
7.config/test.js文件中,有:
//這個(gè)也是node_modules里的依賴方法,用來合并成json用 const merge = require('webpack-merge'); //這個(gè)讀取的是同級(jí)目錄下的prod.js文件 const prodEnv = require('./prod'); //這個(gè)把json合并了下,然后exports了 module.exports = merge(prodEnv, { TEST_ENV: '"test_env"', });
8.config/prod.js文件中,有:
module.exports = { PROD_ENV: '"prod_env"', };
9.現(xiàn)在,回到dev-server.js文件(第5步),其中的config變量的內(nèi)容為:
config { test: { env: { TEST_ENV: '"test_env"', PROD_ENV: '"prod_env"' }, port: 10001, assetsSubDirectory: 'static', assetsPublicPath: '/sub-path-test/', proxyTable: { api: [Object] } } }
10.dev-server.js文件中,主要有以下代碼:
//node_modules里的依賴,框架方法 const express = require('express') //執(zhí)行這個(gè)方法,獲得返回值 const app = express() //node_modules里的依賴,解析路徑用 const path = require('path') //從config對(duì)象(json)里獲取到子路徑相關(guān) //posix是一種平臺(tái)兼容寫法,與join相同,也是把路徑拼接起來 //staticPath="/sub-path-test/static" const staticPath = path.posix.join( config.test.assetsPublicPath, config.test.assetsSubDirectory ) //配置虛擬子路徑、以及靜態(tài)資源目錄 //意思是,訪問/sub-path-test/static時(shí),訪問的類似是當(dāng)前目錄(一般是dist目錄)下的static文件夾中的內(nèi)容 //例如,http://localhost:10001/sub-path-test/static/a.png,訪問的就是static文件夾里的a.png app.use(staticPath, express.static('./static')) //啟動(dòng)項(xiàng)目,設(shè)置啟動(dòng)后的端口,10001 const port = config.test.port module.exports = app.listen(port, err => { if (err) { console.log(err) } })
這段代碼的意思是,使用了express框架,設(shè)置了一個(gè)虛擬訪問路徑與靜態(tài)資源目錄,設(shè)置了一個(gè)項(xiàng)目啟動(dòng)端口。
例如,訪問http://localhost:10001/sub-path-test/static/a.png,訪問的類似是static文件夾里的a.png
注意,項(xiàng)目打包后,在dist文件夾中、會(huì)生成a.png;
不過,只啟動(dòng)項(xiàng)目的話,并不會(huì)打包、dist文件夾是空的,不過也能訪問到,是框架實(shí)現(xiàn)的。
11.dev-server.js文件中,還用到了:
//node_modules依賴方法 const webpack = require('webpack') //自己配置的一個(gè)js文件 const webpackConfig = require('./webpack.dev.conf') //調(diào)用了下webpack方法 const compiler = webpack(webpackConfig) //獲得了個(gè)變量devMiddleware const devMiddleware = require('webpack-dev-middleware')(compiler, { //總之,這個(gè)的值也是 config.test.assetsPublicPath,就是"/sub-path-test/" publicPath: webpackConfig.output.publicPath, noInfo: false, quiet: false, stats: { colors: true, }, }) //給app設(shè)置了下 app.use(devMiddleware)
這段還沒有全看明白,總之就是設(shè)置了個(gè)publicPath,也是/sub-path-test,感覺類似express.static那里。
實(shí)現(xiàn)的效果是,當(dāng)訪問http://localhost:10001/sub-path-test/user/user-detail.html時(shí),訪問的實(shí)際上類似是.../dist/user/user-detail.html。
(是/user/user-detail/app.vue等文件最后生成的user.html文件,如果打包的話就能看到了。)
注意,只啟動(dòng)項(xiàng)目的話,并不會(huì)打包、dist文件夾是空的,不過也能訪問到,是框架實(shí)現(xiàn)的。
12.可以根據(jù)環(huán)境變量不同、配置不同的虛擬訪問路徑(例如測(cè)試用sub-path-test、生產(chǎn)用sub-path);
然后就可以在nginx中、根據(jù)某些變量不同、訪問不同的路徑、就是訪問不同的環(huán)境(例如某些人的賬號(hào)訪問測(cè)試、某些人的賬號(hào)訪問準(zhǔn)生產(chǎn)等,用來自測(cè));
然后可以在公共js方法中,做一些判斷,如果是測(cè)試url、或者如果環(huán)境變量是test、就在發(fā)送請(qǐng)求方法處增加setHeader('Cookie','asd-adf-ad-123-adf')等方法,用來自測(cè)。
三、總結(jié)
1.上方的啟動(dòng)命令與相關(guān)文件,是根據(jù)本人的項(xiàng)目總結(jié)的,僅供參考,不同項(xiàng)目細(xì)節(jié)可能不同。
2.項(xiàng)目啟動(dòng)命令可以自己配置,過程如上,需要熟悉node_modules中的一些依賴方法。(本人新學(xué),好多都不熟悉,無從入手,只能先看,總結(jié)一波自己理解的)
3.可以配置本地vue項(xiàng)目啟動(dòng)時(shí)、端口號(hào)與訪問前綴路徑;
需要注意的是,項(xiàng)目打包部署到服務(wù)器上后又會(huì)有所區(qū)別,服務(wù)器上主要是在nginx中配置訪問端口與前綴路徑的,而不是在vue項(xiàng)目中。
到此這篇關(guān)于vue項(xiàng)目啟動(dòng)命令的文章就介紹到這了,更多相關(guān)vue項(xiàng)目啟動(dòng)命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue啟動(dòng)后請(qǐng)求后端接口報(bào)ERR_EMPTY_RESPONSE錯(cuò)誤的解決
這篇文章主要介紹了vue啟動(dòng)后請(qǐng)求后端接口報(bào)ERR_EMPTY_RESPONSE錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05vue中 el-table每個(gè)單元格包含多個(gè)數(shù)據(jù)項(xiàng)處理
vue項(xiàng)目中,我們需要在el-table中顯示數(shù)組數(shù)據(jù),有的時(shí)候,需要在一個(gè)單元格中顯示多條數(shù)據(jù),如何實(shí)現(xiàn)呢,對(duì)vue el-table單元格相關(guān)知識(shí)感興趣的朋友一起看看吧2023-11-11Vue表單預(yù)校驗(yàn) validate方法不生效問題
這篇文章主要介紹了Vue表單預(yù)校驗(yàn) validate方法不生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04Vue指令之 v-cloak、v-text、v-html實(shí)例詳解
當(dāng)用戶頻繁刷新頁(yè)面或網(wǎng)速慢時(shí),頁(yè)面未完成 Vue.js 的加載時(shí),導(dǎo)致 Vue 來不及渲染,這就會(huì)導(dǎo)致在瀏覽器中直接暴露插值(表達(dá)式),這篇文章主要介紹了Vue指令 v-cloak、v-text、v-html,需要的朋友可以參考下2019-08-08vue+element 多個(gè)相同的select不允許重復(fù)選擇問題
這篇文章主要介紹了vue+element 多個(gè)相同的select不允許重復(fù)選擇問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-07-07vue使用keep-alive實(shí)現(xiàn)組件切換時(shí)保存原組件數(shù)據(jù)方法
這篇文章主要介紹了vue使用keep-alive實(shí)現(xiàn)組件切換時(shí)保存原組件數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10vue打包后,用后端接口報(bào)錯(cuò)304、404問題
這篇文章主要介紹了vue打包后,用后端接口報(bào)錯(cuò)304、404問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Vues中使用JavaScript實(shí)現(xiàn)路由跳轉(zhuǎn)的步驟詳解
在Vue應(yīng)用中,利用Vue?Router進(jìn)行頁(yè)面間的導(dǎo)航是一個(gè)常見需求,本篇博客將通過示例代碼詳細(xì)介紹如何在Vue組件中使用JavaScript實(shí)現(xiàn)路由跳轉(zhuǎn),需要的朋友可以參考下2024-05-05