vue-cli3项目打包并压缩代码体积

前言

最近要上线自己的个人项目,那得要服务器吧,拿着我这“碎银几两”,犹豫不决的买了两年,1核4g的服务器。
不上线不知道,一上线的结果就是:把静态资源加载出来足足花了10秒钟,
对于我这钟没耐性的人来说,都不想等,更别说用户使用者了。

压缩项目大小

  1. 组件路由懒加载
    换成这种写法,当使用的时候,再去引入这个组件的资源。
const Home = () => import('../views/Home.vue')

const routes = [  
{
    path: '/index',
    component: Home
  },
}
  1. 开启gzip压缩
    没开启gzip压缩之前,打包的项目源代码都是原来的格式。
    开启之后,如果大于某个大小,会进行压缩,变成.gz的格式。
    这是我开启之后的
    在这里插入图片描述
    先下载这个包
npm i compression-webpack-plugin -D

下载完成后,在vue.config.js中进行如下配置(脚手架3是没有的,自己根目录下新建即可)

'use strict'
const CompressionPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i
module.exports = {
  publicPath: './',
  outputDir: 'dist',
  assetsDir: 'static',
  productionSourceMap: false,
  configureWebpack: {
    plugins: [
      new CompressionPlugin({
        test: productionGzipExtensions, // 需要压缩的文件正则
        threshold: 10240, // 文件大小大于这个值时启用压缩
        deleteOriginalAssets: true // 压缩后保留原文件
      })
    ]
  },
}

配置完成后,再次build时,就可以打包成.gz文件了。不过还没完成。
后台进行配置,这里我的项目是用nodejs写的。框架是koa2,网上好多nginx的,可自行搜索。

npm i koa-compress
const options = {
  threshold: 1024
}
app.use(compress(options))

然后看一下效果,已经成功了。
在这里插入图片描述

  1. 采用外部cdn的方式
    我的项目里用到了vue、vue-rouer、vuex、axios、element
    这些源代码加起来也是很大的。
    同样在vue.config.js中配置如下:
    看代码配置中的externals这块,不会被打包的模块。
 'use strict'
const CompressionPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i
module.exports = {
  publicPath: './',
  outputDir: 'dist',
  assetsDir: 'static',
  productionSourceMap: false,
  configureWebpack: {
    plugins: [
      new CompressionPlugin({
        test: productionGzipExtensions, // 需要压缩的文件正则
        threshold: 10240, // 文件大小大于这个值时启用压缩
        deleteOriginalAssets: true // 压缩后保留原文件
      })
    ]
  },
  chainWebpack: config => {
    config.when(process.env.NODE_ENV === 'production', config => {
      config.entry('app').clear().add('./src/prod_env.js')
      config.set('externals', {
        vue: 'vue', // 属性为用到的模块名称,值为项目中引入的名称
        axios: 'axios',
        'vue-router': 'VueRouter',
        vuex: 'Vuex'
      })
    })
    config.when(process.env.NODE_ENV === 'development', config => {
      config.entry('app').clear().add('./src/dev_env.js')
    })
  }
}

然后删除/注释掉项目中引入的模块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后在public的index.html中引入外部cdn
在这里插入图片描述
这样再次build,代码同样会减少很多。
项目网址:http://clumsybird.work

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值