webpack-----从入门到精通(二)

从 webpack-----从入门到精通(一)我们知道了webpack的基本配置的相关信息,不过在第一步的操作的,每次生成新的文件,我们都要自己去引入,是不是觉得webpack不是应该自动 ,为啥还要我们手动,其实是因为我们还没用到它的其他方法,今天我们就来介绍他的另外一个配置插件------plugins,

是 webpack 的支柱功能。webpack 自身也是构建于,你在 webpack 配置中用到的相同的插件系统之上!

插件目的在于解决 loader 无法实现的其他事

更多的插件可以去这个查看插件链接

这里就拿几个出来

我们要使用哪个插件就要对应的引入对应的插件  通过 npm i  插件名字 -D可以引入对应的插件

一.HtmlWebpackPlugin

介绍 : 简化了HTML文件的创建,以便为你的webpack包提供服务。这对于在文件名中包含每次会随着编译而发生变化哈希的 webpack bundle 尤其有用。 你可以让插件为你生成一个HTML文件

npm i html-webpack-plugin -D

 

接下来就是在我们刚才的webpack.config.js中引入对应的插件

const path = require('path'); //nodejs的语法,引入路径模块,为了输出的时候找绝对路径
const HtmlWebpackPlugin = require('html-webpack-plugin');  //引入插件
module.exports = {
	// entry: ['./js/index.js', './js/two.js', ],
	entry: {
		one: './js/index.js',
		two: './js/two.js',
	}, //入口文件为main.js  
	output: { //输出
		path: path.resolve(__dirname, 'dist'), //path.resolve为nodejs的固定语法,用于找到当前文件的绝对路径
		// filename: 'bundle.js' ,//输出的文件名
		filename: '[name].bundle.js' //可以以name/id/hash放在中括号里区分文件名
	},
	plugins: [new HtmlWebpackPlugin()]
}




然后我们在重新运行webpack,我们就发现除了刚才生成的JS文件以外 还多一个html,默认名字都是index

它会默认帮我们把刚才生成的JS文件填写进去,这样就不用每次打包后 自己再去引入;

基本配置 这个可以根据需求去配置

const path = require('path'); //nodejs的语法,引入路径模块,为了输出的时候找绝对路径
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
	// entry: ['./js/index.js', './js/two.js', ],
	entry: {
		one: './js/index.js',
		two: ['./js/index.js', './js/two.js', ],
	}, //入口文件为main.js  
	output: { //输出
		path: path.resolve(__dirname, 'dist'), //path.resolve为nodejs的固定语法,用于找到当前文件的绝对路径
		// filename: 'bundle.js' ,//输出的文件名
		filename: '[name].bundle.js' //可以以name/id/hash放在中括号里区分文件名
	},
	plugins: [new HtmlWebpackPlugin({
		title: '陈小白',
		/*这个值对应html里的title值 配置该项,它并不会替换指定模板文件中的title元素的内容,除非html模板文件中使用了模板引擎语法来获取该配置项值, <title><%= htmlWebpackPlugin.options.title %></title>*/
		template: path.join(__dirname, 'default_index.ejs'), //模板文件地址。可以自定义模板
		filename: 'index.html', //文件名,默认为index.html(路径相对于output.path的值)   还可以为输出文件指定目录位置(例如'html/index.html')
		hash: false, //true|false,是否为所有注入的静态资源添加webpack每次编译产生的唯一hash值,添加hash形式如下所示:html <script type="text/javascript" src="common.js?a3e1396b501cdd9041be"></script>
		/* 
		 允许插入到模板中的一些chunk,不配置此项默认会将entry中所有的thunk注入到模板中。在配置多个页面时,每个页面注入的thunk应该是不相同的,需要通过该配置为不同页面注入不同的thunk;
		 chunks: 'all', 所有的都引入
		 chunks: ['one'],  引入对应的JS 如果有多个相同的  可以通过 entry的 key : array 引入 如 
		 entry: {
		 	one: './js/index.js',
		 	two: ['./js/index.js', './js/two.js', ],
		 },
		 */
		chunks: 'all', 
		excludeChunks: [], //这个与chunks配置项正好相反,用来配置不允许注入的thunk。 			
				xhtml: false, //true|fasle, 默认false;是否渲染link为自闭合的标签,true则为自闭合标签
		inject: true, //向template或者templateContent中注入所有静态资源,不同的配置值注入的位置不经相同 1、true或者body:所有JavaScript资源插入到body元素的底部 2、head: 所有JavaScript资源插入到head元素中 3、false: 所有静态资源css和JavaScript都不会注入到模板文件中
		minify: { //html-webpack-plugin内部集成了html-minifier
			collapseWhitespace: true, //压缩空格
			removeAttributeQuotes: true, //移除引号
			removeComments: true, //移除注释
		},
	})]
}

 

模板根据需求添加

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>
			<title>
				<%= htmlWebpackPlugin.options.title %>
			</title>
		</title>
		<% for (var css in htmlWebpackPlugin.files.css) { %>
		<link href="<%=htmlWebpackPlugin.files.css[css] %>" rel="stylesheet">
		<% } %>
	</head>
	<body>

	</body>
	<script type="text/javascript">

	</script>
	<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
	<script type="text/javascript" src="<%=htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
	<% } %>
</html>

模板的建立可以让我们可以减少很多复用性的东西  我们也可以生成多个入口文件去匹配对应的入口 比如 PC端的 移动端的 网页的 等等

而当我们在使用上面的插件的时候 每次都要删除对应的文件在来生成  这样每次操作也有有点烦 这样我们就可以使用clean-webpack-plugin来清除文件在生成对应的文件

clean-webpack-plugin

老规矩 先安装 

npm i clean-webpack-plugin -D

引入

const path = require('path'); //nodejs的语法,引入路径模块,为了输出的时候找绝对路径
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); //引入清除文件插件
module.exports = {
	// entry: ['./js/index.js', './js/two.js', ],
	entry: {
		one: './js/index.js',
		two: ['./js/two.js', ],
	}, //入口文件为main.js  
	output: { //输出
		path: path.resolve(__dirname, 'dist'), //path.resolve为nodejs的固定语法,用于找到当前文件的绝对路径
		// filename: 'bundle.js' ,//输出的文件名
		filename: '[name].bundle.js' //可以以name/id/hash放在中括号里区分文件名
	},
	plugins: [
		new CleanWebpackPlugin(), //位置放在最上面,作用是先删除dist目录再创建新的dist目录。参数在npm官网上有 默认会去清除output.path里的路径,webpack的output.path目录中的所有文件将被删除一次,但是目录本身不会被删除
		new HtmlWebpackPlugin({
			title: '陈小白',
			/*这个值对应html里的title值 配置该项,它并不会替换指定模板文件中的title元素的内容,除非html模板文件中使用了模板引擎语法来获取该配置项值, <title><%= htmlWebpackPlugin.options.title %></title>*/
			template: path.join(__dirname, 'default_index.ejs'), //模板文件地址。可以自定义模板
			filename: 'index.html', //文件名,默认为index.html(路径相对于output.path的值)   还可以为输出文件指定目录位置(例如'html/index.html')
			hash: false, //true|false,是否为所有注入的静态资源添加webpack每次编译产生的唯一hash值,添加hash形式如下所示:html <script type="text/javascript" src="common.js?a3e1396b501cdd9041be"></script>
			/* 
			 允许插入到模板中的一些chunk,不配置此项默认会将entry中所有的thunk注入到模板中。在配置多个页面时,每个页面注入的thunk应该是不相同的,需要通过该配置为不同页面注入不同的thunk;
			 chunks: 'all', 所有的都引入
			 chunks: ['one'],  引入对应的JS 如果有多个相同的  可以通过 entry的 key : array 引入 如 
			 entry: {
			 	one: './js/index.js',
			 	two: ['./js/index.js', './js/two.js', ],
			 },
			 */
			chunks: 'all',
			excludeChunks: [], //这个与chunks配置项正好相反,用来配置不允许注入的thunk。 			
			xhtml: false, //true|fasle, 默认false;是否渲染link为自闭合的标签,true则为自闭合标签
			inject: true, //向template或者templateContent中注入所有静态资源,不同的配置值注入的位置不经相同 1、true或者body:所有JavaScript资源插入到body元素的底部 2、head: 所有JavaScript资源插入到head元素中 3、false: 所有静态资源css和JavaScript都不会注入到模板文件中
			minify: { //html-webpack-plugin内部集成了html-minifier
				collapseWhitespace: true, //压缩空格
				removeAttributeQuotes: true, //移除引号
				removeComments: true, //移除注释
			},
		})
	]
}

他就能先清除后在重新生成新的文件 而不是我们去删除 

更多的插件可以在webpack插件官网npm 官网上查看 npm是外网 访问有点忙 请耐心等候

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值