天天看点

webpack配置_webpack —— 基础配置

webpack配置_webpack —— 基础配置

简介

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)

背景

版本

  • webpack 4.x
  • webpack-cli 3.x
  • webpack-dev-server 3.x

主要参考网站

  • webpack中文网
  • npm
  • babel

基础配置

添加依赖

yarn add -D webpack webpack-cli webpack-dev-server
           

配置代码

const config = {
  mode: 'development', // development or production
  entry: './src/entry.js',
  output: {
    filename: 'bundle.[hash:8].js',
    path: path.resolve(__dirname, 'dist'),
    // publicPath: 'xxx.xx.com', // 公共前缀
  },
}
module.exports = config
````

## 配置说明
- [mode](https://www.webpackjs.com/concepts/mode/) 编译模式,暂时只有 development 和 production
- [entry](https://www.webpackjs.com/concepts/entry-points/) 入口文件,添加需要打包的模块。支持多入口,本地模块和第三方模块分离等操作。
- [output](https://www.webpackjs.com/concepts/output/) 出口文件,控制webpack如何向硬盘写入编译文件(有且只有一个出口)

# Html插入

### 添加依赖

```bash
yarn add -D html-webpack-plugin
           

配置声明

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 生成html插件
           

配置代码

plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html', // 模板html路径
      filename: 'index.html', // 输出文件名字
      minfiy: { // 优化
        removeAttributeQuotes: true, // 去除双引号
      },
      hash: true, // 文件hash
    }),
]
           

配置说明

  • plugins
  • HtmlWebpackPlugin

样式处理

css基础处理

添加依赖

基础

yarn add -D style-loader css-loader
           

配置代码

说明: rules、use中规则从下到上,从右到左依次执行 先后顺序不当会报错

module: {
  rules: [
    {
      test: /.css$/,  // 匹配css文件
      use: [
        'style-loader', // 将文件插入到 html 的 head 标签内
        'css-loader', // 处理css文件中@import引用其他文件
      ]
    },
  ]
}
           

配置说明

  • module
  • style-loader
  • css-loader

less/sass/stylus

以less为例

添加依赖

yarn add -D less less-loader
           

配置代码

module: {
  rules: [
    {
      test: /.less$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        'postcss-loader', // postcss-loader 需要在 css-loader之前处理
        'less-loader',
      ]
    },
  ]
}
           

配置说明

  • less
  • less-loader

优化加强

  • 统一抽离css到单独文件
  • 自动补全适配前缀

添加依赖

yarn add -D postcss-loader autoprefixer
yarn add -D mini-css-extract-plugin
           

配置声明

const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 抽离css样式到统一文件
           

配置代码

module: {
  rules: [
    {
      test: /.css$/,  // 匹配css文件
      use: [
        MiniCssExtractPlugin.loader, // 使用插件抽离css,也可直接使用 style-loader 将样式插入<head>中
        'css-loader', // 处理css文件中@import引用其他文件
        'postcss-loader', // 转化成postcss 借助此来方便自动补全 注:需要在 css-loader之前处理
      ]
    },
  ]
}
           

添加配置文件

文件名:postcss.config.js

内容

module.exports = {
  plugins: [require('autoprefixer')],
}
           

配置说明

  • postcss-loader
  • autoprefixer
  • mini-css-extract-plugin

JS处理

es6 降级处理

添加依赖

yarn add -D babel-loader @babel/core @babel/preset-env
yarn add -D babel-loader babel-preset-env
           

配置代码

module: {
  rules: [
    {
      test: /.js$/, // 匹配js文件
      include: path.resolve(__dirname, 'src'), // 仅包含src下的文件
      exclude: /node_modules/, // 剔除依赖包
      use: {
        loader: 'babel-loader',
        options: {
          presets: [ // 预设处理
            '@babel/preset-env', // es语法处理
          ],
        }
      },
    },
  ]
}
           

配置说明

  • babel-loader
  • @babel/preset-env
  • babel-preset-env

es7+ 高版本语法支持

添加依赖

yarn add -D uglifyjs-webpack-plugin
yarn add -D @babel/plugin-proposal-decorators
yarn add -D @babel/plugin-proposal-class-properties
yarn add -D @babel/plugin-proposal-class-properties
           

配置声明

const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); // js 优化压缩
           

配置代码

{
  test: /.js$/,
  include: path.resolve(__dirname, 'src'),
  exclude: /node_modules/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: [
        '@babel/preset-env', // es语法处理
      ],
      plugins: [
        ["@babel/plugin-proposal-decorators", { "legacy": true }], //es7 decorators语法
        ["@babel/plugin-proposal-class-properties", { "loose" : true }], // es7 class 属性定义语法处理
        ["@babel/plugin-transform-runtime"], // js 高级语法支持和简单的优化
      ]
    }
  },
},
plugins: [
  new MiniCssExtractPlugin({
    filename: 'css/main.[hash:8].css', // 统一放在css文件夹下
    hash: true,
  }),
]
           

配置说明

  • @babel/plugin-proposal-decorators
  • @@babel/plugin-proposal-class-properties
  • @babel/plugin-transform-runtime
  • @uglifyjs-webpack-plugin

添加全局变量

这里采用每个模块默认注入的方式,而不使用暴露模块到全局的操作

加载依赖

yarn add -D webpack webpack-cli
           

配置声明

const webpack = require('webpack');
           

配置代码

注:以lodash库为例,请自行添加依赖

plugins: [
  new webpack.ProvidePlugin({ // 每个模块中注入 _ 代表 lodash
    _: 'lodash',
  }),
],
           

配置说明

  • ProvidePlugin

图片处理

这里根据图片大小做了区分处理,大图引用图片静态资源,小图直接转 base64 到文件中

加载依赖

yarn add -D file-loader url-loader
           

配置代码

{
  test: /.(png|jpg|jpeg|gif)$/,
  use: [
    {
      loader: 'url-loader',
      options: {
        limit: 10 * 1024, // 设置图片限制,超过的使用 file-loader 加载 未超过的转base加载到
        outputPath: 'img/', // 输出到一个文件夹中
        // publicPath: 'xxx.xx.com.cn', // 公共前缀 用于cdn引用等
      }
    }
  ]
},
           

配置说明

  • file-loader
  • url-loader

继续阅读