總結不出更好的了,感覺官方文件已經寫得夠清楚了,翻譯的不好,請大家斧正
簡介
browserslist 是在不同的前端工具之間共用目標瀏覽器和 node 版本的配置工具。它主要被以下工具使用:
- Autoprefixer
- Babel
- post-preset-env
- eslint-plugin-compat
- stylelint-unsupported-browser-features
- postcss-normalize
browserslist示例 演示了上面列舉的每個工具是如何使用 browserslist 的。所有的工具將自動的查詢當前工程規劃的目標瀏覽器範圍,前提是你在前端工程的 package.json 裡面增加如下配置:
{
"browserslist": [
"last 1 version",
"> 1%",
"maintained node versions",
"not dead"
]
}
複製程式碼
或者在工程的根目錄下存在.browerslistrc
配置檔案(內容如下):
# 註釋是這樣寫的,以#號開頭
last 1 version
> 1%
maintained node versions
not dead
複製程式碼
開發者通過設定瀏覽器版本查詢範圍(eg. last 2 versions
),使得開發者不用再頻繁的手動更新瀏覽器版本。browserslist 使用 Can I Use 網站的資料來查詢瀏覽器版本範圍。
browserslist 提供線上的查詢條件練習網站,下面會用到,點選 這裡 前往。
browerslist 衍生的工具
-
browserslit-ga: 該工具能生成訪問你運營的網站的瀏覽器的版本分佈資料,以便用於類似
> 0.5% in my stats
查詢條件, 前提是你運營的網站部署有 Google Analytics。 -
browserslist-useragent : 檢驗 某瀏覽器的user-agent 字串是否匹配 browserslist 給出的瀏覽器範圍。
-
browserslist-useragent-ruby : 功能同上,ruby 庫。
-
caniuse-api: 返回支援指定特性的瀏覽器版本範圍
-
npx browserslist :在前端工程目錄下執行上面命令,輸出當前工程的目標瀏覽器列表。
查詢來源
browerslist 將使用如下配置檔案限定的的瀏覽器和 node 版本範圍:
- 工具 options,例如 Autoprefixer 工具配置中的 browsers 屬性。
BROWERSLIST
環境變數。- 當前目錄或者上級目錄的
browserslist
配置檔案。 - 當前目錄或者上級目錄的
browserslistrc
配置檔案。 - 當前目錄或者上級目錄的
package.json
配置檔案裡面的browserslist
配置項(推薦)。 - 如果上述的配置檔案缺失或者其他因素導致未能生成有效的配置,browserslist 將使用預設配置
> 0.5%, last 2 versions, Firefox ESR, not dead
。
最佳實踐
- 僅僅當你在特定瀏覽器上開發類似於資訊亭之類的 web app 的時候,才可以用類似
last 2 Chrome versions
的查詢條件來鎖定特別具體的瀏覽器品牌和版本。市面上有各種各樣的瀏覽器,同時瀏覽器的版本碎片化也很嚴重,如果你在開發一款通用的 webapp,那就應該考慮瀏覽器多樣性導致的相容問題。 - 如果你不想用 browserslsit 的預設設定,推薦使用
last 1 version
,not dead
和> 0.2%
(或者> 1% in US
,> 1% in my stats
).僅僅使用last n versions
將新增太多的廢棄瀏覽器到工程裡面來,同時也並沒有有效的覆蓋那些佔有率仍然很高的老版本瀏覽器。Just > 0.2% make popular browsers even more popular, so we will have a monopoly and stagnation, as we had with Internet Explorer 6(這裡沒懂啥意思,才疏學淺見諒). - 不移除某些瀏覽器,是因為你不瞭解它們的分佈。Opera mini 在非洲有一億使用者,全球範圍內,它也比 微軟的 Edge 瀏覽器更加流行。QQ 瀏覽器的使用量比桌面端的火狐和 Safari 瀏覽器加起來還多。
查詢條件列表
你可以用如下查詢條件來限定瀏覽器和 node 的版本範圍(大小寫不敏感):
> 5%
: 基於全球使用率統計而選擇的瀏覽器版本範圍。>=
,<
,<=
同樣適用。> 5% in US
: 同上,只是使用地區變為美國。支援兩個字母的國家碼來指定地區。> 5% in alt-AS
: 同上,只是使用地區變為亞洲所有國家。這裡列舉了所有的地區碼。> 5% in my stats
: 使用定製的瀏覽器統計資料。cover 99.5%
: 使用率總和為99.5%的瀏覽器版本,前提是瀏覽器提供了使用覆蓋率。cover 99.5% in US
: 同上,只是限制了地域,支援兩個字母的國家碼。cover 99.5% in my stats
:使用定製的瀏覽器統計資料。maintained node versions
:所有還被 node 基金會維護的 node 版本。node 10
andnode 10.4
: 最新的 node 10.x.x 或者10.4.x 版本。current node
:當前被 browserslist 使用的 node 版本。extends browserslist-config-mycompany
:來自browserslist-config-mycompany包的查詢設定ie 6-8
: 選擇一個瀏覽器的版本範圍。Firefox > 20
: 版本高於20的所有火狐瀏覽器版本。>=
,<
,<=
同樣適用。ios 7
:ios 7自帶的瀏覽器。Firefox ESR
:最新的火狐 ESR(長期支援版) 版本的瀏覽器。unreleased versions
orunreleased Chrome versions
: alpha 和 beta 版本。last 2 major versions
orlast 2 ios major versions
:最近的兩個發行版,包括所有的次版本號和補丁版本號變更的瀏覽器版本。since 2015
orlast 2 years
:自某個時間以來更新的版本(也可以寫的更具體since 2015-03
或者since 2015-03-10
)dead
:通過last 2 versions
篩選的瀏覽器版本中,全球使用率低於0.5%並且官方宣告不在維護或者事實上已經兩年沒有再更新的版本。目前符合條件的有IE10
,IE_Mob 10
,BlackBerry 10
,BlackBerry 7
,OperaMobile 12.1
。last 2 versions
:每個瀏覽器最近的兩個版本。last 2 Chrome versions
:chrome 瀏覽器最近的兩個版本。defaults
:預設配置> 0.5%, last 2 versions, Firefox ESR, not dead
。not ie <= 8
: 瀏覽器範圍的取反。- 可以新增
not
在任和查詢條件前面,表示取反
Debug
直接在工程目錄下執行npx browserslist
來檢視你配置的篩選條件篩選出的瀏覽器版本範圍。
$ npx browserslist
and_chr 61
and_ff 56
and_qq 1.2
and_uc 11.4
android 56
baidu 7.12
bb 10
chrome 62
edge 16
firefox 56
ios_saf 11
opera 48
safari 11
samsung 5
複製程式碼
注意事項
Browserslist 會處理瀏覽器的每個版本,所以應該避免配置這樣的查詢條件Firefox > 0
.
多個查詢條件組和在一起之後,其之間的的覆蓋是以OR
的方式,而是不是AND
,也就是說只要瀏覽器版本符合篩選條件裡面的一種即可。
所有的查詢條件均基於Can I Use的支援列表。例如:last 3 ios versions
可能會返回8.4, 9.2, 9.3
(混合了主版本和次版本),然而last 3 Chrome versions
可能返回50, 49, 48
(只有主版本),總之一切以 CanIUse網站收集的瀏覽器版本資料為準。
瀏覽器分類(大小寫不敏感)
Android
for Android WebView.Baidu
for Baidu Browser.BlackBerry
orbb
for Blackberry browser.Chrome
for Google Chrome.ChromeAndroid
orand_chr
for Chrome for AndroidEdge
for Microsoft Edge.Electron
for Electron framework. It will be converted to Chrome version.Explorer
orie
for Internet Explorer.ExplorerMobile
orie_mob
for Internet Explorer Mobile.Firefox
orff
for Mozilla Firefox.FirefoxAndroid
orand_ff
for Firefox for Android.iOS
orios_saf
for iOS Safari.Node
for Node.js.Opera
for Opera.OperaMini
orop_mini
for Opera Mini.OperaMobile
orop_mob
for Opera Mobile.QQAndroid
orand_qq
for QQ Browser for Android.Safari
for desktop Safari.Samsung
for Samsung Internet.UCAndroid
orand_uc
for UC Browser for Android.
package.json
如果你想減少工程根目錄下的配置檔案的數量,可以在 package.json
中設定 browserslist
配置項,如下所示:
{
"private": true,
"dependencies": {
"autoprefixer": "^6.5.4"
},
"browserslist": [
"last 1 version",
"> 1%",
"IE 10"
]
}
複製程式碼
配置檔案
Browserslist配置檔案應該被命名為 .browserslistrc
或者 browserslist
每條查詢條件獨佔一行。 註釋用 #
開頭:
# Browsers that we support
last 1 version
> 1%
IE 10 # sorry
複製程式碼
Browserslist 將檢查path
路徑上每一級目錄下面是否有配置檔案.
所以,如果工具要處理的檔案路徑是這樣的 app/styles/main.css
, 那麼你可以將配置檔案放置在根目錄,
app/
或者 app/styles
。
也可以在BROWSERSLIST_CONFIG
環境變數中直接指定配置檔案的路徑 。
Shareable Configs
可以使用如下寫法,從另外一個輸出 browserslist 配置的包匯入配置資料:
"browserslist": [
"extends browserslist-config-mycompany"
]
複製程式碼
為了安全起見,額外的配置包只支援字首 browserslist-config-
的包命名. npm包作用域也同樣支援 @scope/browserslist-config
,例如:
@scope/browserslist-config
or @scope/browserslist-config-mycompany
.
When writing a shared Browserslist package, just export an array.
browserslist-config-mycompany/index.js
:
module.exports = [
`last 1 version`,
`> 1%`,
`ie 10`
]
複製程式碼
環境的差異化配置
你可以為不同的環境配置不同的瀏覽器查詢條件。
Browserslist 將依賴BROWSERSLIST_ENV
或者 NODE_ENV
查詢瀏覽器版本範圍
. 如果兩個環境變數都沒有配置正確的查詢條件,那麼優先從 production 對應的配置項載入查詢條件,如果再不行就應用預設配置。
In package.json
:
"browserslist": {
"production": [
"> 1%",
"ie 10"
],
"development": [
"last 1 chrome version",
"last 1 firefox version"
]
}
複製程式碼
In .browserslistrc
config:
[production staging]
> 1%
ie 10
[development]
last 1 chrome version
last 1 firefox version
複製程式碼
Custom Usage Data
If you have a website, you can query against the usage statistics of your site.
browserslist-ga
will ask access to Google Analytics and then generate
browserslist-stats.json
:
npx browserslist-ga
複製程式碼
Of course, you can generate usage statistics file by any other method.
File format should be like:
{
"ie": {
"6": 0.01,
"7": 0.4,
"8": 1.5
},
"chrome": {
…
},
…
}
複製程式碼
Note that you can query against your custom usage data
while also querying against global or regional data.
For example, the query > 1% in my stats, > 5% in US, 10%
is permitted.
JS API
var browserslist = require(`browserslist`);
// Your CSS/JS build tool code
var process = function (source, opts) {
var browsers = browserslist(opts.browsers, {
stats: opts.stats,
path: opts.file,
env: opts.env
});
// Your code to add features for selected browsers
}
複製程式碼
Queries can be a string "> 1%, IE 10"
or an array [`> 1%`, `IE 10`]
.
If a query is missing, Browserslist will look for a config file.
You can provide a path
option (that can be a file) to find the config file
relatively to it.
Options:
path
: file or a directory path to look for config file. Default is.
.env
: what environment section use from config. Default isproduction
.stats
: custom usage statistics data.config
: path to config if you want to set it manually.ignoreUnknownVersions
: do not throw on direct query (likeie 12
).
Default isfalse.
dangerousExtend
: Disable security checks forextend
query.
Default isfalse.
For non-JS environment and debug purpose you can use CLI tool:
browserslist "> 1%, IE 10"
複製程式碼
Coverage
You can get total users coverage for selected browsers by JS API:
browserslist.coverage(browserslist(`> 1%`))
//=> 81.4
複製程式碼
browserslist.coverage(browserslist(`> 1% in US`), `US`)
//=> 83.1
複製程式碼
browserslist.coverage(browserslist(`> 1% in my stats`), `my stats`)
//=> 83.1
複製程式碼
browserslist.coverage(browserslist(`> 1% in my stats`, { stats }), stats)
//=> 82.2
複製程式碼
Or by CLI:
$ browserslist --coverage "> 1%"
These browsers account for 81.4% of all users globally
複製程式碼
$ browserslist --coverage=US "> 1% in US"
These browsers account for 83.1% of all users in the US
複製程式碼
$ browserslist --coverage "> 1% in my stats"
These browsers account for 83.1% of all users in custom statistics
複製程式碼
$ browserslist --coverage "> 1% in my stats" --stats=./stats.json
These browsers account for 83.1% of all users in custom statistics
複製程式碼
Cache
Browserslist caches the configuration it reads from package.json
and
browserslist
files, as well as knowledge about the existence of files,
for the duration of the hosting process.
To clear these caches, use:
browserslist.clearCaches();
複製程式碼
To disable the caching altogether, set the BROWSERSLIST_DISABLE_CACHE
environment variable.