webpack-入口和出口
// webpack.config.js
const path = require('path');

module.exports = {
  // 入口
  entry: './src/index.js', 
  // 出口
  output: {
    publicPath: 'http://cdn.xxx.com/', // index.html 引入js文件前缀
  	path: path.resolve(__dirname, 'dist'),
    filename: 'main.js'
  }
}
webpack-loader

webpack默认只支持打包.js文件,loader的作用就是让webpack认识不同的文件

npm install file-loader 将资源文件复制到指定的打包目录

npm install url-loader -D 将图片转换成base64字符串格式

npm install style-loader -D 将CSS代码放到HTML head标签中的style标签中

npm install css-loader -D 分析CSS文件之间的应用关系,最终生成css代码

npm install sass-loader -D 处理sass语法

npm install postcss-loader -D 增加各浏览器兼容性css语法

module.exports = {
	module: {
    // 配置规则
		rules: [
      // 使用单个loader
      {
        test: /\.(jpg|png|gif)$/, // 匹配文件后缀
        use: {
          loader: 'file-loader',
          options: {
            name: '[name].[ext]', // [name] 源文件名 [ext] 源文件后缀 [hash] 随机生成hash
            outputPath: 'images/' //输出路径
          }
        } // 使用指定loader来处理
      },
      // 处理多个loader
      {
				test: /.css$/
        use: [
        	'style-loader',
        	'css-loader'
        ]// 注意使用loader的顺序会从下往上执行
      },
      {
				test: /.scss$/
        use: [
        	'style-loader',
  				{
  					loader: 'css-loader',
					},
  				'postcss-loader', //postcss.config.js 中配置
  				'sass-loader'
        ]
      },
    ]
	}
}
// postcss.config.js
// npm install autoprefixer -D
module.exports = {
  plugins: [
    require('autoprefixer')
  ]
}

// package.json
{
  "browserslist": [
    '> 1%',
    'last 2 versions'
  ]
}
webpack-plugins

在打包的整个生命周期中 做一些事情 不同时刻 不同节点

npm install html-webpack-plugin -d 生成HTML模板,自动引入打包后的js文件

npm install clean-webpack-plugin -d 打包前清除dist目录下的文件

import HtmlWebpackPlugin = require('html-webpack-plugin') // 生成HTML,并引入JS文件
import { CleanWebpackPlugin } = require('clean-webpack-plugin')
// plugin的使用
module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'	//以某个路径的index.html作为模板
    }),
    new CleanWebpackPlugin()
  ]
}
const path = require('path')

// 生成或指定HTML文件,同时自动引入打包后的文件
const HtmlWebpackPlugin = require('html-webpack-plugin')
// 每次打包前都会都会删除打包目录中的文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
// css-loader: 
// style-loader: 创建style标签,将css-loader处理好的字符串插入到style标签中
// postcss-loader: 处理各大浏览器兼容性
// file-loader: 处理不同类型的文件
// url-loader: 会将引入的图片编码,生成dataURl并将其打包到文件中(base64格式)
module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'builder.js',
    path: path.resolve(__dirname,'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader',
          'postcss-loader'
        ]
      },
      {
        test: /\.(png|svg|jpe?g)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              name: '[name].[ext]',
              outputPath: 'images/',
              limit: 2048
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html'
    }),
    new CleanWebpackPlugin()
  ],
  devServer: {
    proxy: {
      // 将 /api/user 代理到 http://localhost:3000/api/user
      '/api': 'http://localhost:3000',
      '/api1': {
        // 将 /api1/user 代理到 http://localhost:3000/user
        target: 'http://localhost:3000',
        pathRewrite: { '^/api': ''} 
      }
    }
  }
}
Last Updated: