Skip to main content
Version: 3.7.0

浏览器支持

Docusaurus 允许站点通过 browserslist 配置 定义支持的浏览器列表。

目的

网站需要在向后兼容性和包大小之间取得平衡。由于旧版浏览器不支持现代API或语法,因此需要更多的代码来实现相同的功能。

例如,您可以使用可选链语法

const value = obj?.prop?.val;

...遗憾的是,这仅在2020年后发布的浏览器版本中被识别。为了兼容早期的浏览器版本,当为生产环境构建您的站点时,我们的JS加载器会将您的代码转换为更详细的语法:

var _obj, _obj$prop;

const value =
(_obj = obj) === null || _obj === void 0
? void 0
: (_obj$prop = _obj.prop) === null || _obj$prop === void 0
? void 0
: _obj$prop.val;

然而,这会惩罚所有其他用户,因为网站加载时间增加,29个字符的行现在变成了168个字符——增加了6倍!(实际上,情况会更好,因为使用的名称会更短。)作为一种折衷方案,JS加载器仅将语法转换为浏览器列表中定义的所有浏览器版本支持的程度。

默认情况下,浏览器列表通过package.json文件作为根browserslist字段提供。

warning

在旧版浏览器上,编译后的输出将使用不受支持的(过于新近的)JS语法,导致React无法初始化,最终生成一个只有HTML/CSS而没有JS的静态网站。

默认值

使用默认经典模板初始化的网站在package.json中有以下内容:

package.json
{
"name": "docusaurus",
// ...
"browserslist": {
"production": [">0.5%", "not dead", "not op_mini all"],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
// ...
}

用自然语言解释,生产环境中支持的浏览器是那些:

  • 市场份额超过0.5%;并且
  • 在过去24个月内有官方支持或更新(与“死亡”相反);并且
  • 不是Opera Mini。

开发中使用的浏览器有:

  • 最新版本的Chrome Firefox Safari。

你可以使用browserslist CLI来“评估”任何配置,以获取实际的列表:

npx browserslist --env="production"

输出是生产环境中支持的所有浏览器。以下是2022年1月的输出:

and_chr 96
and_uc 12.12
chrome 96
chrome 95
chrome 94
edge 96
firefox 95
firefox 94
ie 11
ios_saf 15.2
ios_saf 15.0-15.1
ios_saf 14.5-14.8
ios_saf 14.0-14.4
ios_saf 12.2-12.5
opera 82
opera 81
safari 15.1
safari 14.1
safari 13.1

阅读更多

您可能希望访问browserslist文档以获取更多规范,特别是接受的查询值最佳实践