[Webpack] loader & plugins

113 阅读2分钟

安装webpack

yarn global add webpack webpack-cli

webpack.config.js

首次使用webpack时,需要初始化webpack.config.js

var path = require("path");

module.exports = {
  mode: "development",  //production 或 development
  entry: "./src/index.js", //打包文件位置
  output: {
    path: path.resolve(__dirname, "dist"), //输出位置
    filename: "index.[contenthash].js", //输出文件名
  }
};

webpack-dev-server

使用webpack-dev-server可以方便开发,该工具会在修改文件后自动pack并刷新页面

yarn add -D webpack-dev-server

配置webpack.config.js

var path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "index.[contenthash].js",
  },
  devtool: "inline-source-map",
  devServer: {
    static: "./dist", //告诉server去哪找文件
  },
};

plugins

HtmlWebpackPlugin

使用该plugin可以让webpack通过模板生成目标网页

yarn add html-webpack-plugin --dev

配置webpack.config.js

var path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "index.[contenthash].js",
  },
  devtool: "inline-source-map",
  devServer: {
    static: "./dist",
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: "素鸡烧肉",
      template: "src/assets/index.html", //指定模板地址
    }),
  ],
};

MiniCssExtractPlugin

该plugin可以将css文件通过link标签的形式插入到页面中。

yarn add -D mini-css-extract-plugin

配置webpack.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  plugins: [new MiniCssExtractPlugin()],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
    ],
  },
};

loaders

css-loader & style-loader

两个loader通常配合使用,style-loader会将css-loader读取的css文件通过style标签的形式插入到页面中。

yarn add -D css-loader style-loader

配置webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};

sass-loader

配合css-loader & style-loader载入一个scss文件

yarn add -D sass-loader dart-sass

配置webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [
          "style-loader",
          "css-loader",
          {
            loader: "sass-loader",
            options: { implementation: require("dart-sass") },
          },
        ],
      },
    ],
  },
};

less-loader

配合css-loader & style-loader载入一个less文件

yarn add -D less-loader

配置webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.less$/i,
        use: [
          "style-loader",
          "css-loader",
          "less-loader",
        ],
      },
    ],
  },
};

stylus-loader

配合css-loader & style-loader载入一个stylus文件

yarn add -D stylus stylus-loader

配置webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.styl$/,
        use: [
          "style-loader",
          "css-loader",
          "stylus-loader",
        ], 
      },
    ],
  },
};

Asset Modules引入文件

webpack5不再使用file-loader引入文件,而是内置了Asset Modules

const path = require('path');

module.exports = {
 module: {
   rules: [
     {
       test: /\.png/,          //引入图片
       type: 'asset/resource'  //文件类型
     }
   ]
 },
};

plugin 和 loader的区别

plugin是webpack的插件,用于丰富和拓展webpack的功能。

loader是webpack的加载器,用于载入某种特定的文件。

懒加载

不在一开始就加载,而是当触发了某些条件之后再加载,就是懒加载,可以提升页面性能。

import('./xxx.xxx')