browserslist
什么是 browserslist
browserslist
在不同的前端工具之间共享配置目标浏览器环境的第三方工具。对于babel
,postcss-autoprefixer
,postcss-normalize
这些工具来说都依赖browserslist
的配置进行浏览器兼容适配。
配置方式
- 支持直接在
package.json
的browserslist
字段中配置;优先级最高
"browserslist": [
"defaults",
"not IE 11",
"maintained node versions"
]
- 同时也支持使用配置文件
.browserslistrc
;优先级次之
# Browsers that we support
defaults
not IE 11
maintained node versions
- 支持不同项目环境下的不同配置,常用
development
和production
来区分,例如
module.exports = {
development: ['last 1 version'],
production: ['last 1 version', '> 1%', 'ie 10'],
};
规则
browserslist
有以下配置项说明:
defaults
:也就是> 0.5%, last 2 versions, Firefox ESR, not dead
> 5%
:>
,>=
,<
或<=
这些符号表示基于全球浏览器使用率统计数据进行的选择,例如> 5%
也就是考虑浏览器市场份额至少在全球5%
以上cover 99.5%
:浏览器的市场覆盖率达到99.5%
dead
:浏览器官方更新已经停滞24
个月以上,例如IE 10
,IE_Mob 11
last 2 versions
:永远支持浏览器最新的两个迭代版本,可以指定对应的浏览器,例如last 2 Chrome versions
node 10
:nodejs10.x
版本特定浏览器:
iOS 7
Firefox > 20
ie 6-8
Firefox ESR
:firefox 拓展包PhantomJS 2.1
:safari 特定版本
特定 JS 语法特性
supports es6-module
:支持 ES6 module,其他可用的语法特性可以从caniuse-lite/data/features
获取
特定时间发布的浏览器版本
since 2015
last 2 years
支持测试版本的浏览器
unreleased versions
配置项组合
browserslist
的配置项支持使用以下形式的符号或者单词进行组合,它们之间的关系类似于集合
符号 | 描述 | 适用范围 | 示例 |
---|---|---|---|
or /, | > .5% or last 2 versions > .5%, last 2 versions | ||
and | > .5% and last 2 versions | ||
not | 可用于任意规则,但是不能用于配置项开头 | > .5% and not last 2 versions |
浏览器列表
以下浏览器都被browserlist
支持,并且配置时大小写不敏感
Android
:安卓 webviewBaidu
BlackBerry
orbb
Chrome
ChromeAndroid
orand_chr
:chrome 安卓Edge
Electron
Explorer
orie
ExplorerMobile
orie_mob
Firefox
orff
FirefoxAndroid
orand_ff
iOS
orios_saf
Node
Opera
OperaMini
orop_mini
OperaMobile
orop_mob
QQAndroid
orand_qq
Safari
Samsung
UCAndroid
orand_uc
kaios
最佳实践
一般是设置不同开发环境的browserlist
配置项,对于使用chrome
开发,而生产环境需要兼容<IE 11
的老破旧来说,一般在package.json
中设置如下规则:
{
"development": ["last 2 Chrome versions"],
"production": [
"last 1 version",
"> 1%",
"ie 10"
]
}
browserlist 更新
browserlist
在2022-05-21
更新中,将IE11
列入不再维护的浏览器版本中,因为微软在2022-06-15
起将正式不再维护 IE 浏览器,所以ie is dead
.
那么此后使用browserlist
设置> 0.5%, last 2 versions, not dead
或者defaults
的浏览器版本,将不再兼容IE11
,这意味着部分依赖browserlist
的开源工具,例如babel
,webpack
等可能会将代码编译成ES6
版本。如果仍然要兼容IE11
,那么需要明确指定IE11
.
"browserslist": [
"last 1 version",
"> 1%",
"IE 11"
]