VUE学习笔记:21.模块化开发之webpack插件使用

Posted new nm个对象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUE学习笔记:21.模块化开发之webpack插件使用相关的知识,希望对你有一定的参考价值。

1.认识plugin

在这里插入图片描述

2.使用BannerPlugin给打包后的文件添加版权声明

在这里插入图片描述
因为BannerPlugin插件是webpack的内置插件,所以不需要额外安装。直接在webpack的配置文件webpack.config.json文件中使用即可。

let path = require('path') //导入path模块
let webpack = require('webpack')
module.exports = {
	entry: './src/main.js',
	output: {
		// 动态获取路径。path.resolve()函数是将两个路径拼接在一起
		// __dirname是获取当前文件的绝对路径
		path: path.resolve(__dirname,'dist'),
		filename: 'build.js',
		publicPath: './dist/'
	},
	module:{
		rules:[
			{
				test: /\\.css$/, //正则表达式匹配.css结尾的文件
				//指定需要使用哪些loader
				// 注意:使用的顺序是先使用css-loader加载文件,然后使用style-loader解析css文件
				//因为webpack在读取多个loader时,是从右往左读,所以将css-loader放在后面
				use:['style-loader','css-loader']
			},
			{
				test: /\\.less$/,//正则表达式匹配.less结尾的文件
				//webpack会先使用less-loader将less文件转换为css文件,然后使用css-loader加载文件,最后使用style-loader解析css文件
				//loader的顺序不能随意改变
				use:['style-loader','css-loader','less-loader']
			},
			{
				test: /\\.(png|jpg|gif|jpeg)$/,
				use:[
					{
						loader: 'url-loader',
						options:{
							// 指定文件的大小。
							//当图片小于limit时,webpack会将图片编译为base64的字符串
							//当图片大于limit时,webpack会将图片重新保存为name属性指定的图片
							limit:102600,
							//指定图片打包后的名字,[name]表示打包前图片的名字;[hash:8]表示8位随机hash值;[ext]表示打包前图片的后缀
							name:'img/[name].[hash:8].[ext]'
						}
					}
				]
			},
			//配置ES6语法转化为ES5语法
			{
				test: /\\.js$/, //正则表达式匹配以.js结尾的文件
				exclude: /(node_modules|bower_components)/, //排除node_modules和bower_components
				use:{
					loader: 'babel-loader',
					options:{
						presets:['es2015'] //指明需要处理的js语法,es2015也就是ES6
					}
				}
			},
			//配置webpack加载.vue文件的loader
			{
				test: /\\.vue/ ,//正则表达式匹配.vue结尾的文件
				use:['vue-loader']
			}
		]
	},
	// 指定vue使用的版本
	resolve:{
		extensions: ['.js','.css','.vue'], //定义哪些文件在导入时可以简写(不加后缀)
		alias:{
			'vue$':'vue/dist/vue.esm.js'
		}
	},
	//配置插件的使用
	plugins:[
		new webpack.BannerPlugin('最终版权归奥特曼所有')
	]


}

重新打包后,查看打包输出文件build.js
在这里插入图片描述

3.使用htmlWebpackPlugin插件打包HTML文件

在这里插入图片描述

  • 在之前的案例中,我们都是讲js,css等文件打包到了dist文件中,但是html文件并没有打包。而实际开发过程中,需要讲html文件也打包到dist文件夹下。这样我们只需要发布dist文件夹即可。
  • 打包html文件需要使用HtmlWebpackPlugin插件来完成。

(1)前期准备

第一步:安装插件html-webpack-plugin

npm install html-webpack-plugin@3.2.0 --save-dev

第二步:在webpack配置文件webpack.config.json中配置插件的使用

let path = require('path') //导入path模块
let webpack = require('webpack')
let HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
	entry: './src/main.js',
	output: {
		// 动态获取路径。path.resolve()函数是将两个路径拼接在一起
		// __dirname是获取当前文件的绝对路径
		path: path.resolve(__dirname,'dist'),
		filename: 'build.js',
		publicPath: './dist/'
	},
	module:{
		rules:[
			{
				test: /\\.css$/, //正则表达式匹配.css结尾的文件
				//指定需要使用哪些loader
				// 注意:使用的顺序是先使用css-loader加载文件,然后使用style-loader解析css文件
				//因为webpack在读取多个loader时,是从右往左读,所以将css-loader放在后面
				use:['style-loader','css-loader']
			},
			{
				test: /\\.less$/,//正则表达式匹配.less结尾的文件
				//webpack会先使用less-loader将less文件转换为css文件,然后使用css-loader加载文件,最后使用style-loader解析css文件
				//loader的顺序不能随意改变
				use:['style-loader','css-loader','less-loader']
			},
			{
				test: /\\.(png|jpg|gif|jpeg)$/,
				use:[
					{
						loader: 'url-loader',
						options:{
							// 指定文件的大小。
							//当图片小于limit时,webpack会将图片编译为base64的字符串
							//当图片大于limit时,webpack会将图片重新保存为name属性指定的图片
							limit:102600,
							//指定图片打包后的名字,[name]表示打包前图片的名字;[hash:8]表示8位随机hash值;[ext]表示打包前图片的后缀
							name:'img/[name].[hash:8].[ext]'
						}
					}
				]
			},
			//配置ES6语法转化为ES5语法
			{
				test: /\\.js$/, //正则表达式匹配以.js结尾的文件
				exclude: /(node_modules|bower_components)/, //排除node_modules和bower_components
				use:{
					loader: 'babel-loader',
					options:{
						presets:['es2015'] //指明需要处理的js语法,es2015也就是ES6
					}
				}
			},
			//配置webpack加载.vue文件的loader
			{
				test: /\\.vue/ ,//正则表达式匹配.vue结尾的文件
				use:['vue-loader']
			}
		]
	},
	// 指定vue使用的版本
	resolve:{
		extensions: ['.js','.css','.vue'], //定义哪些文件在导入时可以简写(不加后缀)
		alias:{
			'vue$':'vue/dist/vue.esm.js'
		}
	},
	//配置插件的使用
	plugins:[
		new webpack.BannerPlugin('最终版权归奥特曼所有'),
		new HtmlWebpackPlugin({
			template: 'index.html' //指定要打包的html文件
		})
	]
}

(2)打包html文件

在这里插入图片描述

  • 修改index.html文件,去除之前引用build.js的代码。

因为使用webpack打包后,会自动在打包后的html文件中引入打包出口文件build.js

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div id="app">
		</div>
	</body>
</html>
  • 修改webpack.config.json文件,去掉路径公共前缀的配置
    在这里插入图片描述
let path = require('path') //导入path模块
let webpack = require('webpack')
let HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
	entry: './src/main.js',
	output: {
		// 动态获取路径。path.resolve()函数是将两个路径拼接在一起
		// __dirname是获取当前文件的绝对路径
		path: path.resolve(__dirname,'dist'),
		filename: 'build.js',
	},
	module:{
		rules:[
			{
				test: /\\.css$/, //正则表达式匹配.css结尾的文件
				//指定需要使用哪些loader
				// 注意:使用的顺序是先使用css-loader加载文件,然后使用style-loader解析css文件
				//因为webpack在读取多个loader时,是从右往左读,所以将css-loader放在后面
				use:['style-loader','css-loader']
			},
			{
				test: /\\.less$/,//正则表达式匹配.less结尾的文件
				//webpack会先使用less-loader将less文件转换为css文件,然后使用css-loader加载文件,最后使用style-loader解析css文件
				//loader的顺序不能随意改变
				use:['style-loader','css-loader','less-loader']
			},
			{
				test: /\\.(png|jpg|gif|jpeg)$/,
				use:[
					{
						loader: 'url-loader',
						options:{
							// 指定文件的大小。
							//当图片小于limit时,webpack会将图片编译为base64的字符串
							//当图片大于limit时,webpack会将图片重新保存为name属性指定的图片
							limit:102600,
							//指定图片打包后的名字,[name]表示打包前图片的名字;[hash:8]表示8位随机hash值;[ext]表示打包前图片的后缀
							name:'img/[name].[hash:8].[ext]'
						}
					}
				]
			},
			//配置ES6语法转化为ES5语法
			{
				test: /\\.js$/, //正则表达式匹配以.js结尾的文件
				exclude: /(node_modules|bower_components)/, //排除node_modules和bower_components
				use:{
					loader: 'babel-loader',
					options:{
						presets:['es2015'] //指明需要处理的js语法,es2015也就是ES6
					}
				}
			},
			//配置webpack加载.vue文件的loader
			{
				test: /\\.vue/ ,//正则表达式匹配.vue结尾的文件
				use:['vue-loader']
			}
		]
	},
	// 指定vue使用的版本
	resolve:{
		extensions: ['.js','.css','.vue'], //定义哪些文件在导入时可以简写(不加后缀)
		alias:{
			'vue$':'vue/dist/vue.esm.js'
		}
	},
	//配置插件的使用
	plugins:[
		new webpack.BannerPlugin('最终版权归奥特曼所有'),
		new HtmlWebpackPlugin({
			template: 'index.html' //指定要打包的html文件
		})
	]
}

  • 打包
    在这里插入图片描述
    在这里插入图片描述
  • 运行dist下的index.html文件
    在这里插入图片描述
    所以项目实际开发时,需要讲包含js,css,html等文件都打包到dist目录下。当发布项目时只需要发布dist目录即可。

4.使用uglifyjs-webpack-plugin插件压缩js代码

在这里插入图片描述

  • 我们在发布dist目录时,总是希望目录越小越好。而实际项目中js代码会非常庞大,那么压缩我们的js代码就非常有必要了。
  • 我们可以使用uglifyjs-webpack-plugin插件来压缩js代码

步骤:

  • 第一步:安装uglifyjs-webpack-plugin插件
npm install uglifyjs-webpack-plugin@1.1.1 --save-dev
  • 第二步:在webpack配置文件webpack.config.json中配置插件的使用
let path = require('path') //导入path模块
let webpack = require('webpack')
let HtmlWebpackPlugin = require('html-webpack-plugin')
let UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
	entry: './src/main.js',
	output: {
		// 动态获取路径。path.resolve()函数是将两个路径拼接在一起
		// __dirname是获取当前文件的绝对路径
		path: path.resolve(__dirname,'dist'),
		filename: 'build.js',
		publicPath: './dist/'
	},
	module:{
		rules:[
			{
				test: /\\.css$/, //正则表达式匹配.css结尾的文件
				//指定需要使用哪些loader
				// 注意:使用的顺序是先使用css-loader加载文件,然后使用style-loader解析css文件
				//因为webpack在读取多个loader时,是从右往左读,所以将css-loader放在后面
				use:['style-loader','css-loader']
			},
			{
				test: /\\.less$/,//正则表达式匹配.less结尾的文件
				//webpack会先使用less-loader将less文件转换为css文件,然后使用css-loader加载文件,最后使用style-loader解析css文件
				//loader的顺序不能随意改变
				use:['style-loader','css-loader','less-loader']
			},
			{
				test: /\\.(png|jpg|gif|jpeg)$/,
				use:[
					{
						loader: 'url-loader',
						options:{
							// 指定文件的大小。
							//当图片小于limit时,webpack会将图片编译为base64的字符串
							//当图片大于limit时,webpack会将图片重新保存为name属性指定的图片
							limit:102600,
							//指定图片打包后的名字,[name]表示打包前图片的名字;[hash:8]表示8位随机hash值;[ext]表示打包前图片的后缀
							name:'img/[name].[hash:8].[ext]'
						}
					}
				]
			},
			//配置ES6语法转化为ES5语法
			{
				test: /\\.js$/, //正则表达式匹配以.js结尾的文件
				exclude: /(node_modules|bower_components)/, //排除node_modules和bower_components
				use:{
					loader: 'babel-loader',
					options:{
						presets:['es2015'] //指明需要处理的js语法,es2015也就是ES6
					}
				}
			},
			//配置webpack加载.vue文件的loader
			{
				test: /\\.vue/ ,//正则表达式匹配.vue结尾的文件
				use:['vue-loader']
			}
		]
	},
	// 指定vue使用的版本
	resolve:{
		extensions: ['.js','.css','.vue'], //定义哪些文件在导入时可以简写(不加后缀)
		alias:{
			'vue$':'vue/dist/vue.esm.js'
		}
	},
	//配置插件的使用
	plugins:[
		new webpack.BannerPlugin('最终版权归奥特曼所有'),
		new HtmlWebpackPlugin({
			template: 'index.html' //指定要打包的html文件
		}),
		new UglifyjsWebpackPlugin()
	]
}

  • 第三步:打包
    在这里插入图片描述
    在这里插入图片描述

以上是关于VUE学习笔记:21.模块化开发之webpack插件使用的主要内容,如果未能解决你的问题,请参考以下文章

VUE学习笔记:18.模块化开发之webpack打包图片文件

VUE学习笔记:22.模块化开发之webpack搭建本地服务器

VUE学习笔记:15.模块化开发之webpack使用配置文件打包

VUE学习笔记:16.模块化开发之webpack打包css文件

VUE学习笔记:14.模块化开发之webpack简介,安装及基本使用

VUE学习笔记:19.模块化开发之webpack处理ES6语法