什么是browserslist
browserslist
是一个配置工具,通过配置查询条件可以筛选出内置数据库 caniuse-lite
里的符合条件的浏览器版本,对于需要做兼容性适配的项目来说,是一个非常有用的工具,browserslist
通常搭配babel
来使用,在得到需要兼容的浏览器版本后,babel
会计算出最合适的垫片
用来转译目标浏览器不支持的es6语法
如何配置
通常可以直接在package.json
中增加一个字段
1 | { |
或者在项目根路径创建.browserslistrc
文件
1 | last 1 version |
last 1 version
表示最新的1个版本
> 1%
表示使用率超过1%
maintained node versions
表示官方还在维护的node版本
not dead
表示官方还在维护
- 如果开发者没有指定配置,
browserslist
会使用默认配置
查看浏览器列表
在项目路径下执行npx borserslist
可以得到配置文件中的查询条件在caniuse-lite
库中查询后的结果
1 | and_chr 114 |
有什么问题
如果没有设置配置文件,或者配置文件采用> 1%
这种写法,随着项目越来越久,会因为一个意料外的问题,假设我们的项目是诞生于2020年,那时npm i browserslist
后在package.json
中的版本是^4.5.0
,这个版本的browserslist
内置的caniuse-lite
库也是一个适配的版本,这个时候> 1%
的语法查询出来的最低的chrome支持版本可能是109,但是2023年某一次删除node_modules
和package-lock.json
后再npm install
后,根据package.json
中的^4.5.0
安装得到的browserslist
依赖的版本可能是4.6.0,那么对应的caniuse-lite
库也得到了更新,所以查询出来的chrome最低支持版本上升到了112,也就是说2年过去了,chrome支持的最低版本从109上升到了112,那么就会产生一个严重的问题:我们的项目必须要支持109,但是现在查询得到112,那么babel
就不会再转移109不支持的语法,导致109实质上被放弃支持,这与我们的初衷有所背离。
怎么解决
所以,如果项目有明确的指出需要支持什么样的浏览器的最低版本,一定要在browserslist
配置里明确的写出,比如:
1 | chrome >= 109 |
那么未来不管caniuse-lite
数据库怎么更新,这个项目都会支持到109的chrome版本。