作为前端你要弄懂webpack

83 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

核心概念

入口(entry)

默认值是 ./src/index.js

自定义配置修改示例:

module.exports = {
  entry: './path/to/my/entry/file.js',
};

输出(output)

主js默认值是 ./dist/main.js

其他文件默认放在./dist

自定义配置修改示例:

const path = require('path');

module.exports = {
  entry: './path/to/my/entry/file.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'my-first-webpack.bundle.js',
  },
};

加载器loader

属性

  • test 属性,识别出哪些文件会被转换。
  • use 属性,定义出在进行转换时,应该使用哪个 loader。

加载器是程序运行过程中做的一些判断,你可以将test理解成if条件语句,use理解成if条件语句后跟随的代码指令。test和use配合使用告诉打包器遇到某某情形应当用什么loader进行转换。

这里给出一些举例帮助大家更好的理解

加载 CSS

为了从 JavaScript 模块中 import 一个 CSS 文件,你需要在 module 配置中 安装并添加 style-loader 和 css-loader,操作如下:

npm install --save-dev style-loader css-loader

加载图片

使用 file-loader,可以将这些内容混合到 CSS 中,操作如下:

npm install --save-dev file-loader

加载字体

同样使用file-loader 和 url-loader 可以接收并加载任何文件,然后将其输出到构建目录。其实我们可以将它们用于任何类型的文件,包括字体。

加载其他文件

此外,可以加载的有用资源还有数据,如 JSON 文件,CSV、TSV 和 XML。类似于 NodeJS,JSON 支持实际上是内置的,也就是说 import Data from './data.json' 默认将正常运行。 要导入 CSV、TSV 和 XML,你可以使用 csv-loader 和 xml-loader,操作如下:

npm install --save-dev csv-loader xml-loader

多语言支持

通过 loader 可以使 webpack 支持多种语言和预处理器语法编写的模块

插件(plugin)

require() 在plugins下配置插件列表,webpack有很多插件可供使用,详情可参见插件列表

模式(mode)

  1. 默认值为 production:为模块和 chunk 启用确定性的混淆名称,
  2. development:为模块和 chunk 启用有效的名。
  3. none:会将 DefinePlugin 中 process.env.NODE_ENV设置为对应的mode

浏览器兼容性(browser compatibility)

Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本),当然ie都要退出历史舞台了,新项目应该不会有这方面的顾虑。

环境(environment)

Node.js v10.13.0+

配置

在实际开发过程中,我们需要根据不同的环境给出不同的webpack配置

截屏2022-06-04 23.42.02.png

模块

导入方式

  • ES2015 import 语句
  • CommonJS require() 语句
  • AMD define 和 require 语句
  • css/sass/less 文件中的 @import 语句。
  • stylesheet url(...) 或者 HTML<img src=...>文件中的图片链接

支持类型

  • ECMAScript 模块
  • CommonJS 模块
  • AMD 模块
  • Assets
  • WebAssembly 模块

模块解析

  • 路径解析
  • 解析loader
  • 缓存 在 watch 模式 下,只有修改过的文件会被从缓存中移出,如果关闭 watch 模式,则会在每次编译前清理缓存。