vue-element-admin打包gzip压缩优化vue项⽬⼤⼩并部署到Nginx,报。。。复制下⾯代码到根⽬录的fig.js
'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')
function resolve(dir) {
return path.join(__dirname, dir)
}
const name = defaultSettings.title || 'CRM' // page title
// If your port is set to 80,
// use administrator privileges to execute the command line.
// For example, Mac: sudo npm run
// You can change the port by the following method:
// port = 9527 npm run dev OR npm run dev --port = 9527
const port = v.port || v.npm_config_port || 9888 // dev port
// All configuration item explanations can be find in /config/
/**
* You will need to set publicPath if you plan to deploy your site under a sub path,
* for example GitHub Pages. If you plan to deploy your site to foo.github.io/bar/,
* then publicPath should be set to "/bar/".
* In most cases please use '/'
* Detail: /config/#publicpath
*/
publicPath: '/',
outputDir: 'dist',
assetsDir: 'static',
lintOnSave: v.NODE_ENV === 'development',
productionSourceMap: true,
devServer: {
port: port,
open: true,
overlay: {
warnings: false,
errors: true
}
},
configureWebpack: {
// provide the app's title in webpack's name field, so that
// it can be accessed in index.html to inject the correct title.
name: name,
resolve: {
alias: {
'@': resolve('src')
}
}
},
chainWebpack(config) {
// it can improve the speed of the first screen, it is recommended to turn on preload
// it can improve the speed of the first screen, it is recommended to turn on preload
config.plugin('preload').tap(() => [
{
rel: 'preload',
// to ignore runtime.js
// github/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
include: 'initial'
}
])
])
// when there are many pages, it will cause too many meaningless requests
config.plugins.delete('prefetch')
// set svg-sprite-loader
.rule('svg')
.exclude.add(resolve('src/icons'))
.end()
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
config
.v.NODE_ENV !== 'development',
config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
config
.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
nginx部署前端项目name: 'chunk-elementUI', // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app                  test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, //  minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
// /configuration/optimization/#optimizationruntimechunk
config.optimization.runtimeChunk('single')
}
)
}
}
项⽬使⽤Nginx部署,所以也要配置⼀下Nginx
在Nginx的conf⽬录下修改f⽂件
在http中增加如上图代码
gzip on;
gzip_static on;
gzip_min_length 1k;
gzip_buffers 432k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6].";
此外需要部署到服务器给外⽹访问,可能也要配置跨域
error_page 405=200 $host$request_uri;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Ty pe,Authorization';
if($request_method ='OPTIONS'){
return204;
}
2021年10⽉29⽇ 修改
之前运⾏的好好的,不会报404
vue-element-admin 打包部署到Nginx报404,接⼝⽆法访问,原因是重复拼接了地址,原来是没有配代理,以前没配置⼜可以运⾏,百度之后看到的:
nginx同时代理vue前端和后台就可以了
server {
listen      8081;
server_name  localhost;
root        /var/local/central/central_web/;
index        index.html;
#前端路径代理
location /exam {
root  html;
index  index.html index.htm;
}
#后台路径代理
location /api/ {
proxy_pass localhost:8760;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
}
所以根据实际情况 我是这样配置的这是我的前端⼯程,是这么写的
这样⼦设置了
前端就不会请求不到接⼝了。。。Nginx完整代码:
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
worker_connections  1024;
}
http {
include      pes;
default_type  application/octet-stream;
default_type  application/octet-stream;
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
#access_log  logs/access.log  main;
sendfile        on;
#tcp_nopush    on;
#keepalive_timeout  0;
keepalive_timeout  65;
gzip on;
gzip_static on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6].";
server {
listen      8887;
server_name  localhost;
#charset koi8-r;
#access_log  logs/host.access.log  main;
location /renren-fast {
proxy_pass  172.16.1.156:8080/renren-fast;
}
location / {
root  E:\vueProject\vue-element-admin\dist;
index  index.html index.htm;
error_page 405 =200 $host$request_uri;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Ty pe,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
if (!-e $request_filename) {
rewrite ^(.*)$ /index.html?s=$1 last;
break;
}
}
#error_page  404              /404.html;
# redirect server error pages to the static page /50x.html
#
error_page  500 502 503 504  /50x.html;
location = /50x.html {
root  html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。