webpack之基础打包优化的实现

webpack之基础打包优化的实现

目录

前言

优化loader

压缩代码

gzip压缩

抽离公共依赖包

最后

前言

webpack至今已经发展了5个版本,如果你还不会webpack,那么赶紧学习起来吧。webpack是web前端开发人员必学的一个知识点。本篇文章带大家一起看看webpack基础的打包优化。话不多说,上酸菜~~~~

优化loader

在脚手架项目中,想必各位开发人员都会用到预处理的css。比如sass、stylus、less这些预处理语言。我们知道使用这些预处理css必须要在webpack中配置相应的loader

当我们配置过多的loader时,各loader之间必定会转换出大量的代码,这些代码会导致项目在启动和打包时变得非常慢,这个时候就需要我们去进行loader的优化了。在loader的相关的配置中,我们可以排除掉第三方包中的文件,减少loader代码转换的范围。

module.exports = { module: { rules: [ test: /\.css$/, loader: ['style-loader', 'css-loader'], include: [resolve('src')],// 只在src文件夹下查找 // 不去查找的文件夹路径,node_modules下的代码是编译过得,没必要再去处理一遍 exclude: /node_modules/ ] } } 压缩代码

webpack中,我们可以使用UglifyjsWebpackPlugin这个插件来压缩 js 和css的代码,从而减小项目打包的体积,提升打包速率。

注意:在开发环境我们不需要使用这个插件~

//安装插件 npm install uglifyjs-webpack-plugin --save-dev //在 vue.config.js中 /** 引入uglifyjs-webpack-plugin */ const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); /** 全局变量,当前环境 */ const env = process.env.NODE_ENV; module.exports = { ... configureWebpack: config => { if (env === "production") { config.optimization.minimizer.push( new UglifyJsPlugin({ //测试匹配压缩的文件 test: /.js(?.*)?$/i, //要被压缩的文件 include: //includes/, //是否开启文件缓存 cache: true, //是否开启多进程并行压缩 paralleL: true, // 使用uglifyOptions移除掉生产环境中的console uglifyOptions: { warnings: false, compress: {drop_console: true, drop_debugger: true, pure_funcs: ['console.log']} } })) }}}

uglifyjs-webpack-plugin这个插件还有很多的配置项 具体可以参考uglifyjs-webpack-plugin

注意开启parallel多进程压缩对项目打包速度的提升很有帮助

gzip压缩

除了压缩 jscss,我们还可以压缩webpack打包之后的文件。

开启gzip压缩后webpack生成的js文件的体积将缩小原来的30%以上。

要开启gzip压缩 我们也需要用到一个插件compression-webpack-plugin 并且我们还需要保证服务端和客户端都支持gzip

//安装插件 npm install compression-webpack-plugin --save-dev //在 vue.config.js中 /** 引入compression-webpack-plugin */ const CompressionWebpackPlugin = require('compression-webpack-plugin'); const productionGzipExtensions = /.(js|css|json|txt|html|icon|svg)(?.*)$/i module.exports = { ... configureWebpack: config => { if (env === "production") { config.plugins.push({ new CompressionWebpackPlugin({ filename: '[path].gz[query]', algorithm: 'gzip', test: productionGzipExtensions, threshold: 10240, minRatio: 0.8 }) }) }}}

compression-webpack-plugin 这个插件同样也有很多的配置项,具体参考compression-webpack-plugin

抽离公共依赖包

对于一些体积较大,不长更新的包,我们并不需要下载到项目中使用。我们可以选择使用cdn的方式去进行引入,当然最好还是将这些库放在自己的服务器下~ webpack允许我们在外部引入一些资源。

webpack的配置中有这样一个配置项 externals:

防止将某些 import 的包(package)打包bundle 中,而是在运行时(runtime)再去从外部获取这些扩展依赖(external dependencies) 。

从外部加载扩展的依赖而不是在项目中获取。 显然,这肯定能减少项目大小,缩小打包体积。

抽离公共依赖包我们也需要安装一个插件html-webpack-plugin。使用这个插件主要是将外部引入的cdn放到index.html中加载。

如果你的webpack的版本大于4.0那么你无需安装,webpack4.0已经自带了该插件。本项目中的webpack的版本是4.2.15的因此无需安装

下面和我一起看看该如何进行配置:

// 在 vue.config.js中 const baseUrl = 'https://minturechan.oss-cn-shenzheng.aliyuncs.com/npm' const cdn = { js: [`${baseUrl}vue@2.6.11/dist/vue.min.js`, `${baseUrl}vue-router@3.2.0/dist/vue-router.min.js`, `${baseUrl}vuex@3.4.0/dist/vuex.min.js`, `${baseUrl}view-design@4.0.0/dist/iview.min.js`, `${baseUrl}jquery@3.4.1/dist/jquery.min.js` ], css: [`${baseUrl}view-design@4.0.0/dist/styles/iview.css`] } module.exports ={ chainWebpack: config => { //config.plugin('html')这个表示获取 html-webpack-plugin这个插件~ config.plugin('html').tap(args => { if (env === "production") { args[0].cdn = cdn } return args }) } }

vue.config.js中配置完成后 我们还需要在public文件夹下的index.html中引入

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <link rel="icon" href="<%= BASE_URL %>zyd.ico" rel="external nofollow" > <title>test</title> <% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %> <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow" rel="external nofollow" rel="preload" as="style" /> <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow" rel="external nofollow" rel="stylesheet" /> <% } %> <% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js){ %> <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script> <% } %> </head> <body> <div id="app"> <!-- built files will be auto injected --> </div> </body> </html>

index.html中加上如下代码即可引入外部cdn资源~~

最后

webpack还有非常多可以优化的地方,本文只是简单的说明了一些webpack基础的打包优化配置。

到此这篇关于webpack之基础打包优化的实现的文章就介绍到这了,更多相关webpack 打包优化内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机

    优化PostgreSQL中的批量更新性能

    优化PostgreSQL中的批量更新性能,数据,表格,在Ubuntu 12.04上使用PG 9.1. 我们目前需要24小时才能运行大量UPDATE数据库上的语句,其形式

    512内存的电脑优化|笔记本内存512

    512内存的电脑优化|笔记本内存512,,1. 笔记本内存512够用,因为运行非常流畅,苹果笔记本 16g512的运行内存是16g内存,机身内存是512g内存,运行

    Windows7下固态硬盘的优化技术

    Windows7下固态硬盘的优化技术,,当微软开发Windows Vista时,固态硬盘没有那么热,所以没有进行优化。Windows 7是不同的。微软从一开始就把SS

    记一次服务端系统性能优化

    记一次服务端系统性能优化,在线,设备, 首先简单介绍一下业务场景,物联网设备,关注公众号,免费领取环保袋。12月8号,也就是昨天上午,突然接

    幻灯片放映慢优化可以加快速度

    幻灯片放映慢优化可以加快速度,,用于制作幻灯片的一些技术更复杂,这些幻灯片在一些旧机器上运行缓慢或缓慢。在这种情况下,我们应该如何优化

    电脑cpu调整软件|电脑优化cpu的软件

    电脑cpu调整软件|电脑优化cpu的软件,,1. 电脑优化cpu的软件出现这个问题归根到底是因为你是用的模拟器,而模拟器是比较卡顿的,尤其在配置比

    bios优化设置|bios的优化设置

    bios优化设置|bios的优化设置,,1. bios的优化设置开机按del键,在bios设置菜单中选择loadfall-safe defaults,在弹出的确认提示中按y键即可

    hp超级本envy优化|hp envy bios

    hp超级本envy优化|hp envy bios,,hp超级本envy优化笔记本开机时显示报错码3f0表现为系统卡顿,原因和解决方法如下3、电脑同时开启了多个应