webpack 基础学习 (一)

参考文献
segmentfault - 基础配置(详细)+核心配置2
vue项目小实例详细的基础实操

1.0、
在这里插入图片描述
2.0、
在这里插入图片描述
2.1、
在这里插入图片描述
2.2、
在这里插入图片描述
3、
在这里插入图片描述

const webpack = require("webpack");
const path = require("path");
const glob = require("glob");
const ManifestPlugin = require('webpack-manifest-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin'); // 清理dist文件夹
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');


module.exports = function (env) {
	const
	isProd = env === 'production';
	let
	entry = buildEntries();

	return {
		mode: isProd ? "production" : "development",
		devtool:'eval-source-map',
		entry: entry,
		devServer:{
			host: 'localhost', //可选,ip
			port: 3000, //可选,端口
			contentBase:path.resolve(__dirname,'html'), //可选,基本目录结构
			compress: true, //可选,压缩
			 hot: true
		},
		
		optimization: {
			    splitChunks: {
			      cacheGroups: {
			        commons: {
			          name: 'commons',
			          chunks: 'initial',
			          minChunks: 2
			        }
			      }
			    }
		},
		
		output: {
			path: path.resolve(__dirname, 'dist'),
			publicPath: '/dist/',
			filename: isProd ? "[name].[chunkhash].js" : '[name].js',
		},

		module: {
			rules: [{
					test: /\.(html|png|gif|jpg|jpeg|eto|eot|ttf|svg|woff|woff2)(\?.*)?$/,
					exclude: /node_modules/,
					use: ['file-loader']
				}, {
					test: /\.css$/,
					exclude: /node_modules/,
					use: [
						// 'css-hot-loader', //支持热更新
						MiniCssExtractPlugin.loader,
						"css-loader", {
							loader: 'postcss-loader',
							"options": {
								plugins: [
									require("autoprefixer")
								]
							}
						}
					]
				}, {
					test: /\.scss$/,
					exclude: /node_modules/,
					use: [
						MiniCssExtractPlugin.loader,
						'css-loader',
						{
							loader: 'postcss-loader',
							"options": {
								plugins: [
									require("autoprefixer")
								]
							}
						},
						'sass-loader'
					]
				}, {
					test: /\.less$/,
					exclude: /node_modules/,
					use: [MiniCssExtractPlugin.loader, 'css-loader', {
						loader: 'postcss-loader',
						"options": {
							plugins: [
								require("autoprefixer")
							]
						}
					}, 'less-loader']
				}, {
					test: /\.(js|jsx)$/,
					exclude: /node_modules/,
					use: [{
							loader: 'babel-loader',
							options: {
								cacheDirectory: true,
								babelrc: false,
								"plugins": ["dynamic-import-webpack"]
								// 使用缓存
							}
						}
					]
				}
			]
		},
		resolve: {
			extensions: [".js", ".json", ".jsx", ".css", "less"],
		
			modules: [path.resolve(__dirname, 'commonjs'), path.resolve(__dirname, 'node_modules')]
		},

		plugins: [new CleanWebpackPlugin(['dist']),
		
		new webpack.HotModuleReplacementPlugin(),
			//全局配置
			new webpack.ProvidePlugin({ // 加载jq
				$: "jquery",
				jQuery: "jquery",
				"window.jQuery": "jquery"
			}), new webpack.NamedModulesPlugin(),
			//抽离样式
			new MiniCssExtractPlugin({
				filename: isProd ? "[name].[chunkhash].css" : "[name].css",
				chunkFilename:   isProd ? "[id].[chunkhash].css" : "[id].css",
			}),
			//压缩样式
			new OptimizeCssAssetsPlugin(),
			//自动补全样式
			new webpack.LoaderOptionsPlugin({
				test: /\.css$/,
				minimize: true,
				debug: false
			}),
			new ManifestPlugin({
				fileName: 'manifest.json',
				basePath: '/dist/'
			})
		],

		performance: isProd && {
			maxAssetSize: 100,
			maxEntrypointSize: 300,
			hints: 'warning'
		},

		stats: {
			colors: {
				green: '\u001b[32m'
			}
		}
	};
	function buildEntries() {
		// 用来构建entery
		const result = glob.sync("js/**/*.js");
		const config = {
			hash: true,
			inject: true
		}
		const entries = {};
		result.forEach(item => {
			const one = path.parse(item);
			const outputfile = one.name;
			console.log("编译文件:" + outputfile)
			entries[outputfile] = "./" + item;
		});
		
		return entries;

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值