webpack的配置

const path = require('path');
// 引入node核心模块用来拿到当前文件的绝对路径
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 安装 npm install --save-dev html-webpack-plugin
// 这个插件用来生成html文件,会帮你自动引入要打包的js,无需自动引入
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// 安装 npm install mini-css-extract-plugin -D
// 这个插件帮助我们来实现css代码的抽离
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
// 安装 npm install css-minimizer-webpack-plugin -D
// 这个插件帮助我们来实现css代码的压缩

module.exports = {
	// 模块导出里面写webpack.config
	mode: 'production',
	// 模式(在什么环境下进行打包)
	// development : 开发模式。此时产生的代码(dist/main.js) 还是可以读的,体积很大
	// production: 生产模式。它会自动启用 webpack 内部的一些优化措施,例如:压缩,混淆,加密......., 总之是让代码不可读,不可还原
	entry: {
		index: './src/index.js',
	}, //入口文件
	// 配置入口(从哪里开始解析)
	output: {
		filename: 'buird.js', //出口文件名字默认叫main.js
		// 文件名
		path: path.join(__dirname, 'dist'),
		// 设置出口文件夹的位置(这个位置必须是绝对路径所以引入node中的path用path.join(__dirname)来拿到当前文件的绝对路径)
		clean: true,
		// 清除上次打包的内容
		assetModuleFilename: 'images/[contenthash][ext]',
		// 设置资源模块的路径和文件名
		// 第一个[]是资源名第二个[]就是资源扩展名
		// contenthash就是根据文件的内容生成一个hash(哈希)的字符串
		//	ext就是使用原资源的扩展名
	},
	// 配置出口
	devtool: 'inline-source-map',
	// 用webpage打包的项目报错只会定位到打包后的文件中,设置devtool:'inline-source-map'可以将错误直接定位在打包前的源文件中
	// 并且可以在打包的js中直观的看到我们打包前的源代码
	plugins: [
		new HtmlWebpackPlugin({
			template: './index.html',
			// template模板 关联 基于根目录下的src文件夹下index.html模板去生成打包的html
			filename: 'app.html',
			// 文件名 打包出来html的文件名
			inject: 'body',
			// 设置在html哪里生成script标签
		}),
		// 使用这个插件用来生成html文件,会帮你自动引入要打包的js,无需自动引入
		new MiniCssExtractPlugin({
			filename: 'styles/[contenthash].css',
			// 文件名 提取出来的css路径和名字
		}),
		// 使用这个插件会将css提取到单独的文件中,为每个包含css的js文件创建一个css文件
	],
	// plugins插件 工具
	devServer: {
		static: path.join(__dirname, './dist'),
		// 指向基于的物理路径(输出dist打包文件到服务器上)
		port: '8888',
		// 端口号
		host: 'localhost',
		// 开发运行时域名,设置成'0.0.0.0',在同一个局域网下,如果你的项目在运行,同时可以通过你的http://ip:port/...访问你的项目
		open: true,
		// 默认是否打开浏览器
	},
	// webpackDevServer(开发服务器)并没有输出任何的物理文件,他把输出的打包文件放在内存里面,删除打包文件依然可以正常的运行
	module: {
		rules: [
			{
				// rules里面配置规则
				test: /\.png$/,
				// test正则验证(验证规则在哪里生效)
				type: 'asset/resource',
				// type配置资源类型
				// resource会导出图片,并绑定导出图片的url
				generator: {
					filename: 'images/[contenthash][ext]',
				},
				// generator里面来设置资源模块的路径和文件名
			},
			{
				test: /\.jpg$/,
				// 正则
				type: 'asset/inline',
				// 配置资源类型
				// inline不会导出图片,绑定的是Date URL base64的格式
			},
			{
				test: /\.txt$/,
				// 正则
				type: 'asset/source',
				// 配置资源类型
				// source用于导出资源中的源代码
			},
			{
				test: /\.gif$/,
				type: 'asset',
				// 配置资源类型
				// asset是通用资源类型在resource和inline之前按照大小去做出选择
				parser: {
					dataUrlCondition: {
						maxSize: 4 * 1024 * 1024,
					},
					// 设置当图片大于maxSize值的时候采取resource小于则采取inlne
				},
				// parser解析器
			},
			{
				test: /\.css$/,
				// use:['style-loader','css-loader']
				// 用css-loader让webpage去解析css,用styleloader把css挂载到页面上
				// 这个loader的顺序不能变,因为loader是从右往左执行,我们先要让webpack去解析css,然后再用style把css挂载到页面上使用
				use: [MiniCssExtractPlugin.loader, 'css-loader'],
				// 通过MiniCssExtractPlugin插件中的loader把css挂载到页面上,之后通过MiniCssExtractPlugin插件设置的把css给放在单独的文件中去
			},
			{
				test: /\.js$/,
				// 正则验证
				exclude: /node_modules/,
				// 排除 node_modules中的js
				use: {
					loader: 'babel-loader',
					// 用babelLoader来解析js
					options: {
						// options来去配置参数
						presets: ['@babel/preset-env'],
						// presets配置预设
					},
				},
			},
		],
	},
	// 配置模块
	optimization: {
		minimizer: [
			new CssMinimizerPlugin(),
			// 使用CssMinimizerPlugin来实现css代码的压缩(mode必须是production)
		],
		// minimizer里面允许通过webpage插件去覆盖默认压缩工具
	},
	// 优化的配置
};

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值