# 基础库

## 客户端版本与基础库版本

在微信客户端中，客户端会储存一个单一版本的基础库，用于启动在这个微信客户端中运行的所有小程序。

例如，一个微信 6.5.8 版本的客户端，当前储存了 1.1.1 版本的基础库，那么，无论在这个客户端中运行任何小程序（包括开发版、体验版），小程序都将以 1.1.1 版本基础库启动。

换而言之，用户使用哪个基础库版本来运行小程序，取决于用户所安装的微信客户端。

这个表现与开发者工具不同：在开发者工具的项目设置中可以指定当前使用的基础库版本号，仅在开发者工具中生效。而在客户端中的基础库版本号是由客户端本身决定的，无法更改。

## 查看当前客户端中的基础库版本号

当前客户端中储存的基础库版本，其版本号可以用以下方法查看：

1. 打开任意开发版或体验版小程序并打开调试；
2. 打开调试模式下的 vConsole；
3. 进入 system 面板；
4. 在日志中可以看到 WechatLib 信息，它标注有基础库版本和基础库编译时间。

## 基础库版本更新

微信客户端有时会静默进行基础库版本更新，将它当前储存的基础库更新为新版本的基础库。

这个更新过程是完全静默的，用户没有感知。对于小程序而言，如果更新过程中有小程序处于运行状态，支持它运行的基础库版本保持不变，直到它下一次冷启动。

对于同一个版本的客户端，如果进行基础库版本更新，它是一个灰度更新的过程：一小部分这个版本的客户端会先进行基础库版本更新，随后更多的客户端进行基础库版本更新，使新版本基础库的覆盖面逐渐扩大，最终，全部这个版本的客户端将全部获得新版本基础库。

例如，微信 6.5.8 版本的客户端，当前运行 1.1.1 版本的基础库，在 1.2.0 版本基础库对微信 6.5.8 版本发布时，首先大约 5% 的客户端会在 2 小时内更新到新版本基础库，其后大约 30% 的客户端在随后的几小时内更新，而所有 6.5.8 客户端都更新到 1.2.0 版本基础库则需要半天到一天时间。灰度更新所需要的总时间取决于这次基础库更新内容的多少和更新风险的大小，有时可以长达数天。

这种更新方式也意味着，在用户手机中运行的基础库版本取决于微信客户端的版本。通常，旧版客户端中运行的基础库版本较旧，新版客户端中运行的基础库版本较新。这也是因为新版本基础库内包含的新特性需要新版客户端提供必要的支持。

当前各版本客户端中的运行的基础库，及它们的用户占比，可在 [基础库版本分布](version) 中查看。

## 基础库版本号

基础库版本号命名为 `major.minor.patch` 的形式，如 1.1.1、1.2.0。版本号命名通常符合以下规则：

- 第 1(major)、2(minor) 位版本号的更新是「依赖客户端版本的更新」，如果某些客户端不更新，那就无法将新版本基础库用于这些客户端。例如用户手机中安装了微信版本 6.5.8 ，如果不再更新微信，那么他的手机中运行的基础库版本有可能是 1.2.x （或其他低于 1.2.0 的版本），但不会是 1.3.0 或更高。客户端有可能运行的最大基础库版本可在 [基础库版本分布](version) 中查看。
- 第 3(patch) 位版本号的更新是「不依赖客户端版本的更新」。例如用户手机中安装了微信版本 6.5.8 ，当前运行基础库版本是 1.2.0 ，如果基础库发布 1.2.1 版本更新，那用户会静默更新为 1.2.1 版本。除非网络失败等极端情况，客户端会尽可能更新到 patch 版本号较大的基础库版本。

关于小程序在不同版本基础库内运行时的兼容方式，可以查看 [兼容处理](/miniprogram/dev/framework/compatibility) 章节。
