Skip to content

一、webpack简介

  1. webpack是什么 静态资源打包器,根据入口文件,把不同的依赖引入,形成代码块chunk。根据不同的资源进行不同的处理,输出bundle文件。
  2. webpack五个核心概念
  • entry:webpack的入口文件,指示webpack以哪个文件为入口,进行打包,分析构建内部依赖图。
  • output: webpack打包后的输出文件,指示webpack以哪个文件为输出,输出到哪个文件夹,以及如何命名。
  • loader: webpack的加载器,指示webpack以什么方式去处理文件,比如js文件,css文件,图片文件,字体文件
  • plugins: 插件,可以用于执行范围更广的业务,插件的范围包括,从打包优化和压缩,一直到重新定义环境变量等。
  • mode: 指示webpack以什么模式去运行,有三种模式,development(开发模式),production(生产模式),none。

二、打包前端资源

1. 打包样式资源

//loader配置
module:{
    rules:[
        // 详细loader配置
        // 不同文件配置不同loader处理
        {
            //匹配那些文件
            test: /\.css$/,
            use:[
                // use执行顺序,从上到下,从左到右依次执行
                // 创建style标签,将js的样式资源插入进行,添加到head中生效
                'style-loader',
                // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                'css-loader'
            ]
        },
        {
            test: /\.less$/,
            use: ['style-loader','css-loader','less-loader']
        }
    ]
}

2. 打包html资源

loader:下载,使用。 plugins:下载,引入,使用

const HtmlWebpackPlugin = require('html-webpack-plugin')
plugins: [
	// html-webpack-plugin
	// 功能:默认创建一个空的html文件,自动引入打包输出的所有资源(js.css)
	// 需求:需要有结构的html文件
	new HtmlWebpackPlugin({
		// 复制index.html文件,并自动引入打包输出的所有资源
		template:'./src/index.html'
	})
]

3. 打包图片资源

module:{
	rules:[
		{
			test: /\.less$/,
			use: ['style-loader','css-loader','less-loader']
		},
		{
			// 默认不能处理html中img图片
			// 处理图片资源
			test: /\.(jpg|png|gif)$/,
			// 下载url-loader,file-loader
			loader: 'url-loader',
			options: {
				// 图片的大小小于8kb,base64处理
				// 优点:能够减少请求数量,减轻服务器压力
				// 缺点:图片体积会更大
				limit:8*1024,
				// 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
                // 解析时会出问题:[object Module]
                // 解决:关闭url-loader的es6模块化,使用commonjs解析
				esModule:false,
				// 图片重命名
				// [hash:10]取图片的hash前10位
				// [ext]取原来的扩展名
				name: '[hash:10].[ext]'
			}
		},
		{
			test: /\.html$/,
			// 处理html文件的img图片
			loader: 'html-loader'
		}
	]
}

4. 打包其他资源

module:{
	rules:[
	{
		test:/\.css$/,
		use:['style-loader','css-loader']
	},
	//打包其他资源(除了html,css,js以外的)
	{
		exclude:/\.(css|js|html)$/,
		loader:'file-loader'
	}
	]
}

5. devServer

// 开发服务器devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)
// 特点:只会在内存中编译打包,不会有任何输出
// 启动devServer指令为:npx webpack-dev-server
devServer: {
	// 项目构建后的路径
	contentBase: resolve(__dirname, 'build'),
	// 启动gzip压缩
	compress:true,
	// 端口号:8080
	port:8080,
	// 自动打开浏览器
	open:true
}

Released under the MIT License.