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

16 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

构建 Webpack 知识体系(一)

什么是 Webpack

前端项目是由很多资源文件组合而成,为了保证代码的正确运行,要考虑文件之间的引用关系,必须严格按照依赖顺序书写代码,除此之外,还有很多其他问题,大大影响开发效率。

为了解决这些问题,市面上出现了很多工具,如gulp、rollup、vite 等,其中目前最具影响力、应用最为广泛的当属 webpack。

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

image-20230208144246526.png

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

使用 Webpack

1.安装

npm i -D webpack webpack-cil

2.编辑配置文件

webpack.config.js

module.export = {
    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

核心流程

  • 入口处理——从 entry 文件开始,启动编译流程
  • 依赖解析——从 entry 文件开始,根据 require or import 等语句找到依赖资源
  • 资源解析——根据 module 配置,调用资源转移器,将 png、css 等非标准 js 资源转译成 js 内容
  • 资源合并打包——将转译后的资源内容合并打包为可直接在浏览器运行的 js 文件

使用 Webpack 处理 CSS

1.安装 Loader

npm i style-loader css-loader
​

2.添加 module 处理 CSS 文件

const path = require('path')
​
module.exports = {
    entry: './src/index',
    mode: 'development',
    devtool: false,
    output: {
        filename: `[name].js`,
        path: path.join(__dirname, './dist')
    },
    module: {
        rules: [{
            test: /.css$/,
            use: ['style-loader', 'css-loader']
        }]
    }
}

接入 Babel

1.安装 Loader

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

2.声明产物出口 output

const path = require('path')
​
module.exports = {
    entry: './src/index',
    mode: 'development',
    devtool: false,
    output: {
        filename: `[name].js`,
        path: path.join(__dirname, './dist')
    },
    module: {
        rules: [{
            test: /.js$/,
            use: [{
                loader: 'babel-loader',
                options: {
                    presets: [
                        ['@babel/preset-env']
                    ]
                }
            }]
        }]
    }
}

生成 HTML

1.安装 依赖

npm i -D webpack-html-plugin

2.声明产物出口 output

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); module.exports = {
  module: {
    rules: [{ test: /.txt$/, use: 'raw-loader' }],
  },
  plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};

参考

Webpack 定义解析 - 掘金 (juejin.cn)