vue dll打包_几个前端小技巧,让你的vue项目体积更小点,打包速度更快点

前言

有时候开发完一个vue项目后,会发现项目包又大打包速度还慢,里面还有很多冗余的文件,比如图片,.vue文件,.js文件等,如果你也遇到类似问题,或者你希望你的项目包更小点,打包速度更快点,本文也许对你有所帮助。

让项目体积更小点

压缩打包的文件

包安装

npm i compression-webpack-plugin@5.0.0 -D / cnpm i compression-webpack-plugin@5.0.0 -D /yarn add compression-webpack-plugin@5.0.0

webapack配置

module.exports = {
...
chainWebpack:config => {
config.plugin('compression')
.use(
new CompressionWebpackPlugin(
{
filename: info => {
return `${info.path}.gz${info.query}`
},
algorithm: 'gzip',
threshold: 10240,
test: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i,
minRatio: 0.8,
deleteOriginalAssets: true
}
)
)
}
}

推荐在生产环境使用

删除多余的文件

包安装

npm i useless-files-webpack-plugin -D / cnpm i useless-files-webpack-plugin -D /yarn add useless-files-webpack-plugin

webapack配置


module.exports = {
...
chainWebpack = config => {
config.plugin('uselessFile')
.use(
new UselessFile({
root: path.resolve(__dirname,'./src/assets/images'),
clean:true,
exclude: /node_modules/
})
)
}
}

推荐生产环境使用

忽略 moment 本地化

webpack配置

module.exports = {
...
chainWebpack : config=>{
config.plugin('IgnorePlugin')
.use(new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/))
}
}

按需加载Element

Babel.config.js

module.exports = {
...
plugins:[
[
"component",
{
libraryName: "element-ui",
styleLibraryName: "theme-chalk"
}
]
]
}

按需导入组件


import Vue from 'vue'
import { Dialog } from 'element-ui'
Vue.use(Dialog)

按需加载Echart

Babel.config.js

module.exports = {
...
plugins:[
...
'equire'
]
}

按需使用echart

// eslint-disable-next-line
const echarts = equire([
"line",
"bar"
])
export default echarts

按需加载loadsh

Babel.config.js

module.exports = {
...
plugins:[
...
'lodash'
]
}

webpack配置


module.exports = {
...
chainWebpack: config =>{
...
config.plugin('loadshReplace')
.use(new LodashModuleReplacementPlugin())
}
}

让项目打包更快

删除 prefetch、preload

webapack配置

module.exports = {
...
chainWebpack: config =>{
config.plugins.delete('prefetch')
config.plugins.delete('preload')
}
}

看自己项目情况/需求使用

开启多线程打包(HappyPack)

包安装


npm i happypack -D / cnpm i happypack -D /yarn add happypack

webpack配置

const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
module.exports = {
...
chainWebpack: config =>{
...
const jsRule = config.module.rule('js')
jsRule.uses.clear()
jsRule.use('happypack/loader?id=babel')
.loader('happypack/loader?id=babel')
.end()
config.plugins.push(
new HappyPack({
id:'babel',
loaders:['babel-loader?cacheDirectory=true'],
threadPool:happyThreadPool
})
)
}
}

看自己项目情况使用

动态链打包

webpack.dll.config

const webpack = require('webpack')
const path = require('path')

module.exports = {
entry: {
vendor: ['vue', 'vue-router', 'axios', 'echarts','element-ui','moment','sortablejs'] // 第三方包
},

output: {
filename: '[name].dll.js',
path: path.resolve(__dirname, 'dll'),
library:'[name]_lib'
},

plugins: [
new webpack.DllPlugin({
path: path.resolve(__dirname, 'dll/[name]-manifest.json'),
name: '[name]_lib'
})
]
}

执行一下这个文件,拿到编译后的代码

webpack --config webpack.dll.config.js

webpack配置

module.exports = {
...
configureWebpack: config => {
config.plugins.push(
new webpack.DllReferencePlugin({
manifest: path.resolve(__dirname, 'dll/vendor-manifest.json')
})
)
config.plugins.push(
new AddAssetHtmlPlugin({ filepath: path.resolve(__dirname,'dll/vendor.dll.js') })
)
}
}

           送资源了,2021前端最全资料,限时领取

c27492c8f83ba3982d7e35a0d775c472.png

前端学习资源免费获取方式

扫码添加明月微信好友(备注:前端)

即可领取所有的前端学习资源了哦

b4ce225bd7a6bcc9c1599fdf2f1b372c.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值