2021-04-11 Webpack的核心概念理解

150 阅读3分钟

什么是Webpack

webpack是一个打包工具-模块解析器,因为浏览器只能识别js和json文件,其他的不能识别,而我们项目又有很多其他文件,这时候,webpack就起作用了,把这些浏览器不能识别的文件解析成js或序列化string和buffer等,然后在嵌入到js代码中

总结下,webpack是一个打包模块化的Javascript工具,它会从入口模块出发,识别出源码的模块化导入语句,递归的找出入口文件的所有依赖,将入口和其所有依赖打包到一个单独的文件中

Webpack安装

  • 全局安装

    • npm install webpack webpack-cli -g 不推荐!!!
    • 全局安装 版本会固定! 升级需要手动!!!
    • 加入手上有多个项目(新的、旧的,导致webpack版本不一致有的3.x 4.x 5.x)
  • 局部安装-项目安装 推荐!

    • 安装最新的4.x稳定版本,因为5.x存在一些bug
    • yarn add webpack@4.43.0 webpack-cli@3.3.12 -D 开发依赖
    • 校验安装成功 npx webpack -v

Webpack启动与构建

1、webpack4支持零配置启动

  • 默认配置文件名webpack.config.js
  • 默认入口文件src/index.js,出口dist/main.js

2、如果默认配置文件改名如config.js,则启动命令为npx webpack --config ./config.js或者在package.json中scripts配置选项中配置命令"build": "webpack --config ./config.js"

3、webpack默认支持JS和JSON模块、支持CommonJS ES-module AMD等模块类型

Webpack配置核心概念

1、entry-入口起点,用来告诉webpack用哪个文件作为构建依赖图的起点,webpack会根据entry递归的去寻找依赖,每个依赖都被它处理,最后输出到打包成果中

  • 可以是string、array和object三种类型
  • string类型最终会被转换成object类型,默认key值为main
  • 单入口应用spa,单页面应用 PC端 seo-搜索引擎优化 sem-搜索引擎营销
  • 多入口应用mpa,多页面应用

2、output-出口,描述了webpack打包后的输出配置,包含输出文件的命名、位置等信息

  • 多个入口对应多个出口
  • 打包后代码、文件的存放位置,绝对路径
  • path属性-path.resolve(__dirname, './dist')
  • filename属性-main.js或者占位符[name].js(name对应的是entry对象中的key值)

3、mode-打包模式

  • none不启用任何优化
  • development开发模式,注重开发体验、代码不会被压缩、输出信息比较多
  • production生产模式,启动TerserPlugin插件压缩代码,为模块和chunk启用混淆模式

4、chunk-代码片段,一个chunk可能有多个模块组合而成,也用于代码合并和分割,如entry入口中的index.js是一个chunks,与之关联的文件代码是一个个的chunk

5、bundle-最终输出的文件,打包后的产物,如dist文件下的bundle.js等

6、loader-默认情况下,webpack仅支持.js.json文件,而其他文件如.vue.tsx等类型可以通过loader解析为js文件或string序列化和buffer等,然后内置在js代码中。理论上只要有相应的loader,就可以处理任何类型的文件

  • loader是对chunk的二次加工
  • 处理非js和json的文件

7、plugin-loader的主要作用是让webpack识别更多的文件类型,而plugin的职责是让其可以控制构建流程,从而执行一些特殊的任务,扩展功能,做些输出优化

8、module-模块,nodeJS万物皆模块

  • 一个chunks至少包含一个模块
  • 一个bundle包含一个chunks
  • chunk是代码片段
  • bundle是文件

最后总结一张图如下:

20210410-徐茂增-webpack-1.png