webpack做项目优化
2024-10-09 15:27:55
webpack优化 -- compression-webpack-plugin 开启gzip
打包的时候开启gzip可以大大减少体积,非常适合于上线部署。下面以vue-cli2.x项目为例,介绍如何在vue中开启gzip。(摘自网络:https://www.cnblogs.com/blogs-xlf/p/11365859.html)
步骤
安装 compression-webpack-plugin
注意,目前最新版需要运行在
webpack4.0
以上,如果你的webpack
是3.x版本的,请安装compression-webpack-plugin
的1.x版本(笔者安装的是1.1.12)。
npm install compression-webpack-plugin -D
改造vue项目配置
- 在
config/index.js
文件中修改productionGzip: true
;
- 在
build/webpack.prod.conf.js
文件中的plugins
添加下面的代码, vue-cli2.x默认已经写好了,则不用管
new CompressionWebpackPlugin({
asset: '[path].gz[query]',
algorithm: 'gzip',
test: new RegExp(
'\\.(' +
config.build.productionGzipExtensions.join('|') +
')$'
),
threshold: 10240,
minRatio: 0.8
})
查看压缩前后的大小对比
如果想知道压缩前后的大小情况,可以使用
webpack-bundle-analyzer
插件,vue-cli2.x默认引进的不用管。然后在package.json
文件中添加下面的script命令:
"report":"npm run build --report=true"
另:
实际项目中的代码:
const needGzip = false
module.exports = {
.....................
chainWebpack: (config) => {
// 移除 prefetch 插件
config.plugins.delete('prefetch')
if (process.env.NODE_ENV === 'production') {
if (process.env.npm_config_report) {
config
.plugin('webpack-bundle-analyzer')
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
}
}
if (needGzip) {
// GZip 生产环境 GZip
config.plugin('compressionPlugin')
.use(new CompressionPlugin({
filename: '[path].gz[query]',
algorithm: 'gzip',
test: /\.css$|\.ttf$|\.html$|\.svg$|\.json$|\.js$/,
threshold: 10240, // 只有大小大于该值的资源会被处理
minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
deleteOriginalAssets: true// 删除原文件
})
)
}
},
.....................
lintOnSave: true
}
webpack 的externals配置
按照官方文档的解释,如果我们想引用一个库,但是又不想让webpack打包,并且又不影响我们在程序中以CMD、AMD或者window/global全局等方式进行使用,那就可以通过配置externals。这个功能主要是用在创建一个库的时候用的,但是也可以在我们项目开发中充分使用。
假设:以jquery为例子,目的是在runtime时通过cdn获取jquery依赖,在打包时忽略他的打包
步骤一:
//index.html
<script
src="https://code.jquery.com/jquery-3.1.0.js"
integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
crossorigin="anonymous">
</script>
步骤二:
//webpack.config.js
module.exports = {
//...
externals: {
jquery: 'jQuery'
//将需要忽略打包的都写在这个里面,但前提是index.html文件里面必须script引入
}
};
//属性名jquery指的是 import $ from 'jquery'中的 'jquery'
属性值 jQuery指的是jquery插件暴露出来的全局对象名。按理来说$应该也是可以写在属性值里面的,(也是jquery暴露的啊,但我没试过行不行)
步骤三:
文件中的
import $ from 'jquery';
千万不能去掉。 很重要,好多人就是把它去掉了跑过来问我为啥我的还是报错jquery is undefined。
vue项目:
module.exports={
..........
configureWebpack: {
externals: {
vue: 'Vue',
'vue-router': 'VueRouter',
vuex: 'Vuex',
'element-ui': 'ELEMENT',
echarts: 'echarts'
},
plugins:[],
.........
}
最新文章
- 给WinForm窗体添加快捷键 响应回车键、空格键
- Linux下memcache的安装和启动
- 转载:《TypeScript 中文入门教程》 14、输入.d.ts文件
- Python基础之面向对象
- 《Inside UE4》目录
- Core Animation 学习
- redis.conf
- redis资料汇总
- spf13-vim – The Ultimate Distribution for Vim Editor
- bzoj2584
- const 那点事儿
- 关于NoClassDefFoundError和ClassNotFoundException异常
- IOS SDWebImage实现基本原理详解(转载)
- 纯css去实现loading动画效果图
- 浅谈Java的主要学习要点_上海尚学堂java培训课程思维导图
- cocos creator主程入门教程(一)—— 初识creator
- Redis考察点解析
- shell 学习笔记一
- 【Tomcat】Tomcat + Memcached 实现session共享
- mongodb的学习-3-在Mac上的安装配置