webpack配置项简述

webpack模块打包机

环境

	mode:'development' | 'production' 

webpack4-5直接使用生产环境会默认开启treestrek,处理js,json文件

入口

	entry:'./src/index.js'	// 入口文件

出口

	output:{
		filename:'built.js',
		path:resolve(__dirname,'build')
	}
	// 也可以批量配置出口

loader

	module:{
		rules:[
			// 详细的loader配置
			test:\.js$\,
			use:[
				// 执行顺序,从右到左,从下到上
				
			]
		]
	}
处理js的loader
	js		babel-loader
处理css的loader
	scss	css-loader	sass-loader	
	less	css-loader	less-loader
	css		css-loader	style-loader
处理图片的loader
	统一使用  url-loader	
			image-webpack-loader(压缩图片配置的loader)
处理字体的loader
	统一使用  file-loader
处理tpl的loader
	tpl		ejs-compiled-loader

plugin



const CleanCSS = require("clean-css");
// 清除css

const UglifyJsPlugin  = require('uglifyjs-webpack-plugin')
webpack3需要使用该插件,4-5自动开启
	plugins.push(
        new webpack.optimize.UglifyJsPlugin({
          //压缩代码
          compress: {
            warnings: false,
          },
        })
  );

文件拷贝

公共文件或者是项目中使用的插件使用拷贝
const CopyWebpackPlugin = require("copy-webpack-plugin");

var copyDir = ["img", "lib"],
copyConfig = [];
copyDir.forEach((dir) => {
  // 当循环文件的时候自动创建img下对应的图片文件夹
  copyConfig.push({
    from: `./src/${dir}`,
    to: path.resolve(__dirname + config.getPublicPath()) + "/" + dir,
    ignore: ["**/.*/**/*", "*.scss"],
    transform: function (content) {
      if (dir !== "css") return content;
      return new CleanCSS({}).minify(content).styles; //压缩css文件
    },
  });
});

plugins.push(
  //文件copy插件
  new CopyWebpackPlugin(copyConfig)
);

css文件抽离(已被弃用,使用mini-css-extract-plugin)

将js中的css文件进行抽离到独立文件输出
style-loader、css-loader 需要配合两项loader使用
const ExtractTextPlugin = require("extract-text-webpack-plugin");

plugins.push(new ExtractTextPlugin("css/[name].css"));


  	{
        test: /\.(sa|sc|c)ss/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          // publicPath: "../img/",
          use: ["css-loader", "sass-loader"],
        }),
      },
      {
        test: /\.less$/,
        use: ExtractTextPlugin.extract({
          //分离less编译后的css文件
          fallback: "style-loader",
          use: ["css-loader", "less-loader"],
        }),
      },

处理兼容css loader

cnpm i postcss-loader postcss-preset-env -D

压缩css插件

cnpm i optimize-css-assets-webpack-plugin -D


 new OptimizeCssAssetsWebpackPlugin()

压缩html

cnpm i html-webpack-plugin -D

plugins:[
	new HtmlWebpackPlugin({
		template:'./src/index.html',
		minify:{
			// 移除空格
			collapseWhitespace:true,
			// 移除注释
			removeComments:true
		}
	})
]

多出口打包文件

对于生产出的文件进行分类
const HtmlWebpackPlugin = require("html-webpack-plugin");

// htmlpages 为一个html文件目录
HtmlPages.forEach((page) => {
  // 生成html文件
  plugins.push(
    new HtmlWebpackPlugin({
      //根据模板插入css/js等生成最终HTML
      static: {
        meta: metatpl,
        header: headertpl,
        footer: footertpl,
        js: jstpl,
      },
      filename: `./${page}.html`, //生成的html存放路径,相对于 path
      template: `./src/${page}.ejs`, //html模板路径
      favicon: "./favicon.ico",
      hash: true,
      minify: {                   // 是否开启压缩false为不压缩
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true,
      },
      chunks: [page],             // 为不同的页面注入不同的chunk
      excludeChunks: ["print", "report"], //不包含打印入口文件
    })
  );
  entryConfig[page] = `./src/js/${page}.js`;
});
打包更新文件
删除旧文件,生产新文件,直接插件中实例化使用即可
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

plugin.push(new CleanWebpackPlugin())
愿以往所学皆有所获
原文地址:https://www.cnblogs.com/Azune/p/15637838.html