Webpack5 入门(1):webpack简单使用

简介: 自 2012年3月10日诞生,Webpack 到今年已经是一个有着悠久历史的老牌构建工具了。Webpack 基于 Node.js 开发,默认采用了 CommonJS 模块化规范。每一个文件都是一个模块,默认支持的模块类型有 `.js` 和 `.json`。对于其他类型的模块,比如 `.vue`,`.jsx`,`.ts`、`.css` 以及图片类型的模块,都需要安装对应的 `loader` 进行编译处理。

Webpack 是一个模块打包工具。

自 2012年3月10日诞生,Webpack 到今年已经是一个有着悠久历史的老牌构建工具了。

Webpack 基于 Node.js 开发,默认采用了 CommonJS 模块化规范。每一个文件都是一个模块,默认支持的模块类型有 .js.json。对于其他类型的模块,比如 .vue.jsx.ts.css 以及图片类型的模块,都需要安装对应的 loader 进行编译处理。

核心概念

Webpack 中有一些非常重要的概念和特性:

  • entry
  • output
  • module
  • plugin
  • loader
  • mode
  • chunk
  • assets
  • environment
  • tree shaking
  • source map
  • HMR(hot module replace)

将这些概念和特性搞清楚,你对 webpack 就有足够深入的了解了。我们会采用逐步渐进的方式讲解 webpack 的用法,在这个过程中会把这些内容一一介绍到。

推荐阅读文档

Webpack 官方文档是非常好的学习资料,点击阅读

文档包含了五个部分,分别是 API 介绍概念介绍配置项介绍使用指南迁移指南loaderplugin 的介绍。

image-20220804132907957

一个最简单的示例

本专栏中所用到的 node 包管理工具为 pnpm ,特点是快和节省磁盘空间。如果不熟悉 pnpm 的小伙伴请点击这里阅读文档,也可以搜索社区内的文章。当然你完全可以使用自己习惯的工具 npm 或者 yarn

接下来看一个最简单的示例。

示例仓库

该系列的代码示例已经上传到 Github,点此访问

创建项目

mkdir 01_basic
cd 01_basic
pnpm init

目录结构为:

image-20220804140042858

入口文件

// src/index.js

import { add } from './math'

const res = add(10, 20)
console.log(res)

json 模块

// src/index.json

{
  "name": "kw"
}

math.js 模块

// src/math.js

export function add(a, b) {
  return a + b
}

我们的项目一般也是这样的结构,按功能划分模块,然后构建出一个完成的应用。

前端应用最终运行的环境一般都是浏览器,但是目前并不是所有的浏览器都支持这种模块化的代码。所以就需要用到 Webpack 打包工具,将源码打包成目标浏览器能识别的代码。

安装 Webpack

pnpm add -D webpack webpack-cli 
在 Webpack4以前,只需要安装 webpack 就可以使用;从 4 版本以后,需要安装两个包:

webpack:用来编译打包的核心包,它提供了 API 供在代码中调用。

webpack-cli:提供了在终端中使用 webpack 的命令

第一次打包

// pnpm webpack 相当于 npx webpack,会去 node_modules/.bin 目录中找到 webpack 命令来执行
pnpm webpack --mode development

当执行 webpack 命令时,它会自动去找命令执行时所在目录下的 src/index.js 或者 src/index.json 作为打包的入口文件。还记得为什么会找 json 文件吗?因为在 Node 中的模块化规范中,.js 文件,.json 文件以及 .node 文件都属于文件模块。

找到入口文件后,会以 mode 选项指定的参数development 作为构建的模式进行打包。

image-20220804135344151

打包出来的文件会输出到 dist 目录下,打包文件默认叫作 main.js

image-20220804133752770

使用打包文件

index.html 中引入打包后的文件:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Webpack5</title>
</head>

<body>
    <script src="./dist/main.js"></script>
</body>

</html>

打开浏览器,打开控制台:

image-20220804135604554

经过 webpack 打包后的文件,可以正常在浏览器中使用了。

测试 IE

我们使用 IE11 浏览器打开 index.html,发现依然报错:

打开报错的地方,可以发现报错的地方是一个箭头函数的语法:

通过查询 Caniuse,发现 IE 全系浏览器竟然是不支持箭头函数的:

所以,在后面我们还需要借助 babel 工具,将箭头函数转为普通函数,来让 IE 识别。

从这个过程中也能体会到,webpack 仅仅是一个模块化的构建工具,对于一些高级的语法特性,它并没有做出处理。这其实属于兼容性的问题,包括 js 和 css 的兼容性。这个放到后面会讲到。

测试 json 模块的打包

将 index.js 重命名为其他文件,则 src 目录下的 index.json 就会被识别为可用的入口文件。

执行打包命令:

pnpm webpack --mode development

image-20220804140835410

看下输出的 main.js 文件:

image-20220804140916995

可见,webpack 默认能处理 json 模块,在查找模块时优先级次于 js 模块。

小结

本文就 Webpack 的简单使用做了演示,主要的知识点有:

  • webpack 和 webpack-cli 的区别
  • webpack 命令的使用
  • webpack 默认的打包入口文件和输出文件
  • webpack 只支持打包模块,不能处理语法

下篇文章,我们会讲解一些 Webpack 常用的配置选项。

目录
相关文章
|
4月前
|
JSON JavaScript 前端开发
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
52 2
|
3月前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
56 0
|
3月前
|
存储 前端开发 JavaScript
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
54 0
|
4月前
|
JSON 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(上)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
58 0
|
3月前
|
JSON 前端开发 JavaScript
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
41 0
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
|
4月前
|
前端开发 JavaScript
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)(上)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
40 2
|
4月前
|
Web App开发 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(下)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
29 0
|
4月前
|
存储 前端开发 JavaScript
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
20 0
|
4月前
|
测试技术 开发工具 开发者
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)(上)
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
30 0
|
5月前
|
缓存 前端开发 API
《Webpack5 核心原理与应用实践》学习笔记-> webpack插件开发基础
《Webpack5 核心原理与应用实践》学习笔记-> webpack插件开发基础
68 0