webpack4 优化之生成动态链接库

1.在讲解之前先说一个比较简单的webpack优化,我们都知道jquery是一个不依赖其他的插件的一个js函数库 但是我们webpack 解析的时候 会去寻找里面的依赖库 这个时候会给打包增减点时间
我们可以让webpack 不去解析 jquery中的依赖关系 就可以 达到webpack的优化效果了

module:{
		noParse:/jquery/, // 不去解析jquery中的依赖关系
}

然后我们再执行npm run build的时候 打包速度明显就加快了些
2.上面的只是预热了一下 下面才开始正题
我们先使用webpack 搭建一个 react的项目
第一步先进入文件夹 初始化项目
npm init -y
第二步安装依赖
npm i react react-dom babel-loader @babel/core @babel/preset-env @babel/preset-react -D
当然webpack也要提前安装好 还有一些辅助的插件
npm i webpack webpack-cli webpack-dev-server html-webpack-plugin -D
3.当前目录下 新建立 src 文件夹 src/index.js

import React from "react";  // 引入react
import { render } from "react-dom"
render(<h1>Hello world</h1>,document.getElementById('root')); // 页面上渲染一个hello world

4.新建立一个webpack.config.js文件 进行我们的webpack配置
注意 别忘记在当前项目下新建立一个 index.html的模板文件

let path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');
module.exports={
	mode:'development',
	entry:'./src/index.js',
	output:{
		filename:'bundle.js',
		path:path.resolve(__dirname,'dist/')
	},
	devServer:{
		port:'3000',
		open:true,
		contentBase:'./dist'
	},
	module:{
		noParse:/jquery/, // 不去解析jquery中的依赖关系
		rules:[
			{
				test:/\.js$/i,
				use:{
					loader:'babel-loader',
					options:{
						presets:[
							'@babel/preset-env',
							'@babel/preset-react'
						]
					}
				}
			}
		]
	},
	plugins:[
		new HtmlWebpackPlugin({   // 引入html模板文件
			template:'./index.html',
			filename:'index.html'
		})
	]
}

5.在package,json文件中配置启动和打包

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "dev": "webpack-dev-server"
  },

然后我们执行 npm run build
在这里插入图片描述
最后在页面上确实显示出来了 Hello world
接着我们再看下 打包的代码大小
在这里插入图片描述
839kb 快1M的代码空间 这个时候我们能不能把他变小一点呢 答案是当然可以了
前面大家都知道了 我们打包只有代码之所以这么大 是因为 我们引入了俩个 大的 js 代码库
react 和react-dom
我们可能有这样的想法 能不能把这俩个先打包了 然后导出一个变量 让我们需要引入的页面 引入导出的变量 不就可以缩小 我们 的代码体积了么
这个webpack 也确实给我们 整了一种方法 就是来解决这种问题 生成动态链接库
6.在当前项目下 新建立一个 webpack.config.react.js文件 来配置

let path=require('path');
let webpack=require('webpack');
module.exports={
	mode:'production',
	entry:{
		react:['react','react-dom'] // 打包 react 和react-dom 在一个 代码块 react中
	},
	output:{
		filename:'_dll_[name].js',   //  产生的文件名字
		path:path.resolve(__dirname,'dist/'),
		library:'_dll_[name]',  //  导出的js文件  库名字叫做 ab
		libraryTarget:'var'  // comomjs 规范
	},
	plugins:[
		new webpack.DllPlugin({
			name:'_dll_[name]',  // 要和output输出文件名字同名
			path:path.resolve(__dirname,'dist','manifest.json')
		})
	]
}

配置完成后我们执行 命令
npx webpack --config webpack.config.react.js
会在dist目录下生成一个 manifest.json的文件和_dll_react.js文件
后面我们就要在我们的项目中引入了
首先 手动在我们的index.html的模板文件中引入我们生成的 js文件

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="root"></div>
	<script src="./_dll_react.js"></script>
</body>
</html>

还没有结束 还需要在 我们的webpack.config.js中引入我们的动态链接库资源

plugins:[
		new webpack.DllReferencePlugin({
			manifest:path.resolve(__dirname,'dist','manifest.json')
		}),
		....
}

到这里之后 保证代码没有写错的情况下 重新运行一下 npm run build 试试看
在这里插入图片描述
页面照样出来了 Hello world 的文件 然后我们再看看 压缩后的代码体积

在这里插入图片描述
才 6.62kb 是不是明显缩小了很多 这个生成动态链接库 算是webpack 中 比较常见的一种优化方式了 好了到此结束了
如果觉得有用 点个赞 谢谢了

发布了196 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yunchong_zhao/article/details/104667533