真能扯啊。
按照我的经历,我认为学习vue一个障碍和困难,是不容易了解它整个项目结构。*.vue本身的内容较容易掌握,但更大的方面,比如它整个项目的运行机制,路由,配置,就比较讳莫如深了。资料很少,说的人也是不知从哪里抄的,没有说清楚。对于像我这样普通的开发者来说,让我不用啥框架,直接用空白项目捣鼓出一个看得过去的前端,我会感到困难重重,这也不知,那也不懂,无从下手。这其中,就包括这个vue.config.js。
vue.config.js,就是vue项目的配置文件咯。一度传闻vue3创建项目时,默认是不提供这个文件,要用的话只能自己手动创建。但一旦创建,vue又会自动地优先使用其中的配置。这给人一种很扯的感觉。不过,不久前我创建vue3项目,里面是有vue.config.js的。其实,vue也没有什么好神秘的,它就是一个巨大的语法糖,或者解释器。虽然它创建了这样那样的书写结构,但最终是要编译成原始的js。你看vue3的语法,我感觉并不比vue2更高明,反而有种累赘和啰嗦的感觉,估计VUE4还要来个大改,折腾不止,至死方休。
说回vue.config.js。vue.config.js里面,同样有许多神秘的咒语。不过后来逐渐有了一些发现。下面这段代码就摘自我们之前一个vue项目的vue.config.js。
module.exports = {
devServer: {
port: 8090, // 端口号,如果端口号被占用,会自动加1
host: '0.0.0.0',// 主机名, 127.0.0.1, 真机 0.0.0.0
https: false, //协议
open: false, //启动服务时自动打开浏览器访问
disableHostCheck: true,
proxy: {
'/api':{
target:PROXY_API_BASE_URL,
pathRewrite:{
"^/api":""
}
},
'/webapps':{
target:PROXY_BASE_URL,
pathRewrite:{
"^/webapps":"/webapps"
}
},
'/javapubzy':{
target:PROXY_BASE_URL,
pathRewrite:{
"^/javapubzy":"/javapubzy"
}
},
'/arcgis':{
target:PROXY_BASE_URL,
pathRewrite:{
"^/arcgis":"/arcgis"
}
}
}
},
。。。
}
代码中,devServer算是系统的保留字,用来配置我们的开发环境,从名字也能看出来。所以,别看它里面写了这么多,又是端口,又是代理,让人一看就头大,其实只是用于我们本机开发和调试。一旦发布和打包,就与它无关了。我们将发布包部署到nginx,端口和转发,就遵循nginx的设置:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 8081;
server_name 192.168.10.8;
location / {
root E:/code/web/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://192.168.10.9:8090/;#必须斜杠/结尾
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
咦,孰为汝多知乎。