Webpack是一种前端资源构建工具,是一个静态模块打包器(module bundler)
    在Webpack看来,前端的所有资源文件,都会被作为模块处理
    它将根据模块依赖的关系进行静态分析,打包生成对应的静态资源。

    1. 入口(entry)

    入口起点指示 webpack 应该使用哪个模块,来作为构建其内部 依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

    1. 输出(output)

    output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。
    const path = require(‘path’);
    代码最上面导入的 path 模块是什么,它是一个 Node.js 核心模块,用于操作文件路径
    filename
    作用:输出的HTML文件名,默认为index.html,可以直接配置带有子目录
    filename是相对于output.path的,而在webpack-dev-server中,则是相对于webpack-dev-server配置 的publicPath

    1. output.publicPath

    默认值: 空字符串
    官方解释:
    webpack提供一个非常有用的配置,该配置能帮助你为项目中的所有资源指定一个基础路径,它被称为公共路径(publicPath)
    这里所说的资源的基数路径是指项目中引用的css、js、img等资源的一个基础路径,这个基础路径要配合具体资源中指定的路径使用,所以其实打包后的资源的访问路径可以用如下公式表示
    静态资源最终访问路径 = out.publicPath + 资源loader或插件等配置路径
    output.publicPath = ‘/dist/‘// image
    options: {
    name: ‘img/[name].[ext]?[hash]’
    }
    最终图片的访问路径为 output.publicPath + ‘img/[name].[ext]?[hash]’ = ‘/dist/img/[name].[ext]?[hash]’
    output.filename output: { filename: ‘[name].js’ }
    最终js的访问路径为 output.publicPath + ‘[name].js’ = ‘/dist/[name].js’// extract-text-webpack-plugin
    css new ExtractTextPlugin({
    filename: ‘style.[chunkhash].css’
    })
    最终css的访问路径为 output.publicPath + ‘style.[chunkhash].css’ = ‘/dist/style.[chunkhash].css’
    一般情况下publicPath应该以’/‘结尾,而其它loader或插件的配置不要以’/‘开头
    https://juejin.cn/post/6844903601060446221

    1. loader

    可以理解为一个翻译官 (将浏览器不认识的翻译为浏览器所认识的)
    webpack 只能理解 JavaScript 和 JSON 文件
    loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。
    在 webpack 的配置中,loader 有两个属性:
    (一) test 属性,识别出哪些文件会被转换。
    (二) use 属性,定义出在进行转换时,应该使用哪个 loader。

    1. 插件(plugin)

    引入一些项目中本身没有,但是确又需要的功能的相关插件
    loader 用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。
    包括:打包优化,资源管理,注入环境变量。
    使用步骤:
    引入:require()它;
    把它添加到plugins数组中;
    通过选项(option)自定义/使用new操作符来创建一个插件实例。

    1. 模式(mode)

    三种环境 development、production、none
    webpack内置环境默认值为 production

    1. 浏览器兼容性(browser compatibility)

    webpack支持所有符合ES5标准的浏览器
    webpack的inport()和require.ensure()需要Promise,如果想要支持旧版的浏览器
    在使用这些表达式之前,还需要提前加载polfill。
    @babel/preset-env 会根据目标环境来进行编译和打补丁。 具体是target属性
    @babel/plugin-transform-runtime 是对 Babel 编译过程中产生的 helper 方法进行重新利用(聚合),以达到减 少打包体积的目的。此外还有个作用是为了避免全局补丁污染,对打包过的 bunler 提供”沙箱”式的补丁。
    @babel/polyfill 通过定制 polyfill 和 regenerator,提供了一个ES2015+ 环境 polyfill的库。

    1. 配置(Configuration)

    webpack遵循CommonJS模块规范
    模块(Modules)
    在模块化编程中,开发者将程序分解为离散的chunk,并称之为模块
    webpack支持的模块类型
    ECMAScript模块
    CommonJS模块
    AMD模块
    Assets
    WebAssembly模块
    loader
    loader可以使webpack支持多种语言和预处理语法编写的模块。loader向webpack描述了如何处理非原生模块,并将依赖引入到你的bundles中。
    模块解析
    resolver是一个帮助寻找模块绝对路径的库,一个模块可以作为另一个模块的依赖模块,然后被后者引用
    resolver帮助webpack每个require/import语句中,找到需要引入到bundle中的模块代码
    webpack能解析三种文件路径
    绝对路径、相对路径、模块路径
    模块路径
    在resolve.modules中指定的所有目录检索模块,可以通过配置别名的方式来替换初始模块路径

    1. target

    设置webpack的环境
    由于JavaScript既可以编写服务端代码也可以编写浏览器代码,webpack提供了多种部署target
    设置target属性,需要在webpack设置中设置target字段
    多target
    通过设置两个独立配置,来构建对library进行同构

    1. mainfest

    简单理解:打包后,webpack管理所有模块之间的交互
    当compiler开始执行、解析和映射应用程序时,它会保留所有模块的详细要点,这个数据集合称为”manifest”
    当完成打包并发送到浏览器时,runtime会通过manifest来解析加载模块
    通过使用manifest中的数据,runtime将能够检索这些标识符,找出每个标识符背后对应的模块。

    1. 模块热替换(HMR)

    模块热替换功能会在应用程序运行过程中,替换、添加或删除模块,而无需加载整个页面。

    1. chunck

    chunck两种形式:
    initial(初始化)是入口起点的main chunk。此chunk包含为入口起点指定的所有模块及其依赖项。
    每个chunk都有对应的asset(资源)。资源,是指输出文件(即打包结果)。
    运行指令:
    webpack组成部分的核心五大块:
    entry、output、module、plugins、mode
    开发环境:webpack ./src/index.js -o ./build/built.js —mode=development
    webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到./build/built.js,且打包的环境是开发环境
    // resolve用来拼接绝对路径的方法
    const { resolve } = require(‘path’);
    // dirname node.js变量,代表当前文件的绝对路径
    path: resolve(
    dirname,’build’);
    常用的loader
    css-loader、style-loader、less-loader、sass-loader、html-loader(common.js)、url-loader(url-loader)
    关闭 ES6模块化,使用common.js解析(url-loader)
    esModule:false
    给图片进行重命名
    //[hash:10] 取图片hash的前10位
    // [ext]取文件原来的扩展名
    name: ‘[hash:10].[ext]’
    file-loader: 打包其它资源(除了html/js/css资源以外的资源)
    exclude: /.(css|js|htm|less)$/
    开发服务器 devServer 用来自动化(自动编译,自动打开浏览器,自动刷新浏览器~~)
    特点: 只会在内存中编译打包,不会有任何输出
    webpack-dev-server
    devServer: {
    // 项目构建后路径
    contentBase:resolve(__dirname,’build’),
    // 启动gzip压缩
    compress:true,
    // 端口号
    port:3000,
    // 自动打开浏览器
    open:true
    }