天天看点

vue前端项目优化

本次针对的是vue cli脚手架进行webpack相关的配置, 包含到nginx 和dockerfile

部署环境 

@vue/cli 4.5.13  、nginx、 dockerfile、 k8s CI\CD

 一、包体积优化

分隔js

代码分隔出来的js文件名  

{
    path: '/401',
    component: () => import(/* webpackChunkName: "401" */'@/views/error-page/401'),
    hidden: true
  },
           

 配置打包名字

configureWebpack: {
    output: { // 输出重构  打包编译后的 文件名称  【模块名称.版本号.时间戳】
      filename: './static/js/[name].js',
      chunkFilename: './static/js/[name].js'
    }
}
           

 没有用到hash,固定名字下面需要配合缓存解决,css本来想用插件但是用了更简单的方案

css也配置去掉hash,上面的 output 配置也可以去掉看个人要求

vue前端项目优化

支持GZIP

安装 compression-webpack-plugin   npm i compression-webpack-plugin -D

// 顶部加入
const CompressionPlugin = require('compression-webpack-plugin')


 configureWebpack: {
    output: { // 输出重构  打包编译后的 文件名称  【模块名称.版本号.时间戳】
      filename: './static/js/[name].js',
      chunkFilename: './static/js/[name].js'
    },
    // GZIP
    plugins: [
      new CompressionPlugin({
        algorithm: 'gzip',
        test: /\.(js|css)$/, // 匹配文件名
        threshold: 81920, // 对超过10k的数据压缩
        deleteOriginalAssets: false, // 不删除源文件
        minRatio: 0.8 // 压缩比
      })
    ]
// ........其他的配置
}
           

一半的人会报错:

 ERROR  TypeError: Cannot read property 'tapPromise' of undefined

最后发现是是compression-webpack-plugin版本问题,

compression-webpack-plugin 默认安装的是 7 版本的

先执行卸载命令->npm uninstall compression-webpack-plugin

执行安装命令->npm i [email protected] -D

效果图:

vue前端项目优化

缓存问题解决

nginx配置协商缓存,加入一下配置

gzip_static on;

 add_header Cache-Control no-cache;  

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       /etc/nginx/mime.types;
  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  /var/log/nginx/access.log  main;
  sendfile        on;
  keepalive_timeout  65;
  gzip_static on;
  server {
    listen       80;
    server_name  localhost;
    add_header Cache-Control no-cache;
    location / {
      add_header Cache-Control no-cache;
      root   /app;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}
           

无用包去除

 npm install -g depcheck

项目中运行 depcheck 即可

//下面才是重点 这里检查只是为了减少npm i的工作量
Unused dependencies
* driver.js
* print-js
* react-scripts
* showdown

// 这里我建议别动尤其ts项目
Unused devDependencies
* @vue/cli-plugin-babel
* @vue/cli-plugin-eslint
* @vue/cli-plugin-unit-jest
* @vue/test-utils
* autoprefixer
* babel-core
* babel-eslint
* html-webpack-plugin
* node-sass
* sass-loader
* script-ext-html-webpack-plugin
* serve-static
* svg-sprite-loader

//下面才是重点 找出src下面无用的vue文件或者无用的引用 删除才能减少打包体积
Missing dependencies
* husky: ./package.json
* qs: ./src/utils/http.js
* lodash: ./src/utils/http.js
* clearfix: ./src/styles/mixin.scss
* scrollBar: ./src/styles/mixin.scss
* relative: ./src/styles/mixin.scss
* pct: ./src/styles/mixin.scss
* direction: ./src/styles/mixin.scss
* if: ./src/styles/mixin.scss
* triangle: ./src/styles/mixin.scss
* tui-editor: ./src/components/MarkdownEditor/index.vue
* body-parser: ./mock/mock-server.js
           

注意:package.json的无用依赖去除不会减少打包体积,src下的无用 import才是影响包体积原因