Webpack知识体系构建 | 青训营笔记

78 阅读1分钟

Webpack知识体系构建 | 青训营笔记

这是我参与【第四届青训营】笔记创作活动的第10天

一、什么是Webpack

Webpack本质上是一种前端资源编译、打包工具

image-20220816135228770.png

  • 将多份资源打包成一个Bundle
  • 支持Babel、Eslint、TS、CoffeScript、Less、Sass
  • 支持模块化处理css、图片等资源文件
  • 支持HMR+开发服务器
  • 支持持续监听、持续构建
  • 支持代码分离
  • 支持Tree-shaking
  • 支持Sourcemap
使用Webpack

1.安装

npm i -D webpack webpack-cli

2.编辑配置文件

module.exports = {
    entry:'main.js',
    output:{
        filename:"[name].js",
        path:path.join(__dirname,"./dist"),
    },
    module:{
        rules:[{
            test:/\.less$/i,
            use:['style-loader','css-loader','less-loader']
        }]
    }
}

3.执行编译命令

npx webpack

核心流程

image-20220816140239435

关于Webpack的使用方法,基本都围绕”配置“展开,而这些配置大致可划分为两类:

  • 流程类:作用于流程中某个or若干个环节,直接影响打包效果的配置项
  • 工具类:主流程之外,提供更多的工程化能力的配置项
流程类配置

image-20220816140635631

配置总览

image-20220816140705808

文件结构image-20220816140748461

1.声明入口entry

module.exports = {
    entry: "./src/index"
};

2.声明产物出口output

webpack.config.js

const path = require("path");

module.exports = {
    entry: "./src/index",
    output: {
        filename:"[name].js",
        path:path.join(__dirname,"./dist"),
    }
};
处理CSS

image-20220816141225689

index.js

const style = require("./index.css")
import styles from './index.css'

1.安装Loader

npm add -D css-loader style-loader

2.添加module处理css文件

webpack.config.js

const path =require("path");

module.exports = {
    entry:"./src/index",
    output:{
        filename:"[name].js",
        path:path.join(__dirname,"./dist"),
    },
    module:{
        //css处理器
        rules:[{
            test:/\.css/i,
            use:[
                "style-loader",
                "css-loader"
            ],
        }],
    },
};
接入Babel

文件结构

image-20220816140748461.png

index.js

class Person {
    constructor() {
        this.name = 'xx'
    }
}
console.log((new Person()).name)

const say = () => {}

1.安装依赖

npm i -D @babel/core @babel/preset-env babel-loader

2.声明产物出口output

3.执行npx webpack

生成HTML

文件结构

image-20220816141225689.png

1.安装依赖

npm i -D html-webpack-plugin

2.声明产物出口output

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

module.exports = {
    entry: "./src/index",
    output:{
        filename:"[name].js",
        path: path.join(__dirname,"./dist"),
    },
    plugins: [new HtmlWebpackPlugin()]
};

3.执行npx webpack

工具线

image-20220816143016986.png

二、Loader组件

文件结构

image-20220817115212889.png

index.js

import styles from './a.less';

1.安装Loader

npm add -D css-loader style-loader less-loader

2.添加module处理css文件

module.exports = {
    module:{
        rules:[
            {
                test:/\.less$/i,
                use:[
                    "style-loader",
                    "css-loader",
                    "less-loader",
                ],
            },
        ],
    },
};
  • less-loader:实现less => css的转换
  • css-loader:将css包装成类似module.exports = "${css}"的内容,包装后的内容符合JavaScript语句
  • style-loader:将css模块包进require语句,并在运行时调用injectStyle等函数将内容注入到页面的style标签

特点:

  • 链式执行
  • 支持异步执行
  • 分normal、pitch两种模式
常见Loader

image-20220817115923244.png