javascript-browserslist-在不同的前端工具間共享目標瀏覽器
阿新 • • 發佈:2018-11-06
javascript browserslist - 在不同的前端工具(Autoprefixer, Stylelint, babel-preset-env)之間共享目標瀏覽器。 github地址: https://github.com/browserslist/browserslist 官網: https://twitter.com/browserslist 瀏覽器檢測網站: https://caniuse.com browserslist 字串,查詢到的瀏覽器列表,以及市場總的佔有率檢視 https://browserl.ist 文件翻譯: 可用於: Autoprefix Babel ... 每個工具如何使用 browserslist 的示例,可以在下面連結檢視: https://github.com/browserslist/browserslist-example 當我們在 'package.json' 檔案中,新增合適的配置,所有工具將會自動發現目標瀏覽器: { "browserslist": [ "last 1 version", "> 1%", "maintained node versions", "not dead" ] } 或者在 '.browserslistrc' 檔案來配置: last 1 version > 1% maintained node versions not dead 我們可以在查詢中(例如:last 2 version),設定版本列表,從而避免了手動更新版本。Browserslist 會從 'Can I Use' 網站(http://caniuse.com/),進行查詢,從而篩選出指定的版本。 Browserslist 可以從 '工具選項'、 'browserslist' 配置、'.browserslistrc' 配置、'package.json 中的 browserslist 片段' 或 '環境變數' 來設定查詢。 我們可以在 'https://browserl.ist' 測試 Browserslist 的查詢。 工具: browserslist-ga - 下載您的網站的瀏覽器統計資訊,用於在 '> 0.5% in my stats' 查詢字串進行查詢 browserslist-useragent - 通過 user agent 來檢查瀏覽器,來匹配 Browserslist 目標瀏覽器查詢 browserslist-useragent-ruby - 同上,不過是基於 ruby caniuse-api - 返回支援某些特定功能的瀏覽器 在專案目錄執行 npx browserslist,來檢視專案的目標瀏覽器。該 CLI 工具是內建的,並且在任意的 'Autoprefix' 專案裡都可用。 查詢: Browserslist 可以從以下的來源,進行查詢,來使用瀏覽器和 Node.js 版本: 1.當前目錄或父級目錄的 package.json 檔案裡的 browserslist 鍵。(推薦使用此方法) 2.工具選項。例如,在 Autoprefix 中的 browsers 選項。 3.BROWSERSLIST 環境變數 4.當前目錄或父級目錄的 browserslist 配置檔案 5.當前目錄或父級目錄的 .browserslistrc 配置檔案 6.如果以上方法不能產生一個有效的解決,Bro wserslist 將預設使用:> 0.5%, last 2 versions, Firefox ESR, not dead。 最佳實踐 1.僅當我們專門為一個瀏覽器終端建立 web app時,才直接使用瀏覽器(last 2 Chrome versions)。市場上有很多瀏覽器。如果我們正在建立一個通用的 web app,我們應該尊重瀏覽器的多樣性。 2.如果你想更改瀏覽器的預設集合,我們建議將 last 1 version、not dead 和 > 0.2%(或 > 1% in US, > 1% in my stats) 結合起來使用。'last n versions' 添加了太多的死瀏覽器,並未新增流行的舊版瀏覽器。> 0.2% 使得流行瀏覽器更受歡迎,這樣,我們將會有壟斷(monopoly)和停滯(stagnation),就像我們使用 IE6 一樣。 3.不要僅因為您不瞭解瀏覽器而刪除它們。 Opera Mini 在非洲擁有1億使用者,它在全球市場上比 Microsoft Edge 更受歡迎。QQ 瀏覽器的市場份額比 Firefox 和桌面 Safari 都要多。 全部列表 我們可以通過以下查詢條件,來執行瀏覽器和 Node.js 版本(忽略大小寫): > 5% - 根據全球使用統計來選擇瀏覽器版本。也可以使用 '>=', '<', '<='。 > 5% in US - 使用 USA 的使用統計。接受 '2個字母的國家/地區程式碼'。(https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) > 5% in alt-AS - 使用 alt-AS (alt-AS - 亞洲區域)的使用統計。所有的地區程式碼可在後面連結找到。(https://github.com/ben-eb/caniuse-lite/tree/master/data/regions) > 5% in my stats - 使用 '自定義使用資料' cover 99.5% - 基於覆蓋率 cover 99.5% in US cover 99.5% in my stats maintained node versions - 所有 Node.js 版本,仍然由 Node.js 基金會維護(https://github.com/nodejs/Release) node 10 和 node 10.4 - 選擇最新的 Node.js 10.x.x 或 10.4.x 釋出版 current node - Browserslist 目前使用的 Node.js 版本 extends browserslist-config-mycompany - 從 'browserslist-config-mycompany' npm 包獲取查詢字串 ie 6-8 - 選擇一個範圍的版本 Firefox > 20 - 高於 20 版本的火狐。也可以使用 '>=', '<', '<='。 iOS 7 - 直接指定 iOS 瀏覽器版本 7。 Firefox ESR - 最新的 [火狐 ESR] 版本。 unreleased versions 或 unreleased Chrome versions - alpha 和 beta 版本。 last 2 major versions 或 last 2 iOS major versions - 最近2個主版本的所有次要(minor)/補丁(patch)版本。 since 2015 或 last 2 years - 2015 年起釋出的所有版本。(也可以是 since 2015-03 或 since 2015-03-11) dead - last 2 versions, < 5%,並且24個月內官方未提供支援或更新。目前有:IE 10, IE_Mob 10, BlackBerry 10, BlackBerry 7, OperaMobile 12.1。 last 2 versions - 每個瀏覽器最新的2個版本 last 2 Chrome versions - Chrome 瀏覽器最新的2個版本 defaults - Browserslist 的預設瀏覽器查詢字串(> 0.5%, last 2 versions, Firefox ESR, not dead) not ie <= 8 - 排除所有低於 ie 8 的版本 我們可以給任何查詢前,新增 not 除錯 在專案目錄,執行 npx browserslist,來檢視我們的查詢條件,都選擇了哪些瀏覽器 npx browserslist 注意 Browserslist 適用於不同版本的瀏覽器。應該避免類似:Firefox > 0 這種查詢。 多查詢,使用 'OR' 來組合。瀏覽器版本必須匹配至少一個查詢。 所有查詢都是基於 'Can I Use' 支援的資料,例如:last 3 iOS versions,可能選中 8.4、9.2、9.3(主版本和次版本混合),而 last 3 Chrome versions 可能選中 50、49、48(只有主版本) 瀏覽器 Android Baidu BlackBerry 或 bb Chrome ChromeAndroid 或 and_chr Edge Electron Explorer 或 ie ExplorerMobile 或 ie_mob Firefox 或ff FirefoxAndroid 或 and_ff iOS 或 ios_saf Node Opera OperaMini 或 op_mini OperaMobile 或 op_mob QQAndroid 或 and_qq Safari Samsung UCAndroid 或 and_uc package.json 如果想在專案根目錄,減少配置檔案,可以在 package.json 的 browserslist 欄位進行配置 { "private": true, "dependencies": { "autoprefixer": "^6.5.4" }, "browserslist": [ "last 1 version", "> 1%", "IE 10" ] } 配置檔案 Browserslist 配置檔案,應該命名為 .browserslistrc 或 browserslist,檔案內每行只能寫一個查詢條件 last 1 version > 1% IE 10 Browserslist 會檢查 'path' 路徑下的每個目錄,來搜尋配置檔案。因此,如果工具處理 'app/styles/main.css',我們可以將配置檔案放在 app/ 或 app/styles 我們可以在 BROWSERSLIST_CONFIG 環境變數,來指定上面提到的 'path' 路徑。 可共享的配置 我們可以使用下面的查詢,從另一個包匯入 Browserslist 配置: "browserslist": [ "extends browserslist-config-mycompany" ] 出於安全考慮,外部配置僅支援具有 'browserslist-config-' 字首的包。通過使用 '@scope/browserslist-config' 命名或者字首化模組,也支援 npm 範圍包(npm scoped packages),例如:@scope/browserslist-config 或 @scope/browserslist-config-mycompany。 如果你不接受來自使用者的瀏覽器查詢,可以通過使用 'dangerousExtend' 選項來禁用驗證: browserslist(queries, { path, dangerousExtend: true }) 由於這種方式使用了 npm 解析,我們還可以引用指定包的指定檔案: "browserslist": [ "extends browserslist-config-mycompany/desktop", "extends browserslist-config-mycompany/mobile" ] 當編寫共享的 browserslist 包時,只需要匯出一個數組。browserslist-config-mycompany/index.js: module.exports = [ 'last 1 version', '> 1%', 'ie 10' ] 環境變數 如果某些工具內部使用 Browserslist,我們可以通過設定 '環境變數' 來改變瀏覽器設定: BROWSERSLIST - 指定瀏覽器查詢條件 BROWSERSLIST="> 5%" gulp css BROWSERSLIST_CONFIG - 指定配置檔案路徑 BROWSERSLIST_CONFIG=./config/browserslist gulp css BROWSERSLIST_ENV - 指定所處環境 BROWSERSLIST_ENV="development" gulp css BROWSERSLIST_STATS - 指定 '> 1% in my stats' 查詢,所參考的自定義的使用資料的路徑(以後使用 in my stats,將會根據該檔案的資料來查詢瀏覽器) BROWSERSLIST_STATS=./config/usage_data.json gulp css BROWSERSLIST_DISABLE_CACHE - 禁用從快取中讀取配置 BROWSERSLIST_DISABLE_CACHE=1 gulp css 環境 我們也可以為不同的環境指定不同的瀏覽器查詢。Browserslist 會根據 'BROWSERSLIST_ENV' 或 'NODE_ENV' 變數來選擇查詢條件。如果沒有宣告不同環境的查詢條件,Browerslist 將首先查詢 'production' 環境的查詢條件,沒有的話,則使用預設。 在 package.json 檔案: "browserslist": { "production": [ "> 1%", "ie 10" ], "development": [ "last 1 chrome version", "last 1 firefox version" ] } 在 .browserslistrc 配置檔案: [production staging] > 1% ie 10 [development] last 1 chrome version last 1 firefox version 自定義使用資料 如果你有自己的網站,則可以根據網站的使用情況的統計來查詢。'browserslist-ga' 要求訪問 Google Analytics,然後生成 browserslist-stats.json: npx browserslist-ga 當然,你可以通過其他任何方法來生成使用情況統計檔案。檔案格式應該如下: { "ie": { "6": 0.01, "7": 0.4, "8": 1.5 }, "chrome": { … }, … } 注意,我們可以在使用自定義使用資料查詢的同時,結合其他查詢。例如:> 1% in my stats, > 5% in US, 10%。 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 } 查詢字串可以是字串("> 1%, IE 10")或陣列格式(['> 1%', 'IE 10'])。 如果沒有指定查詢字串,Browserslist 將查詢配置檔案。我們可以提供一個 'path' 選項(這可以是一個檔案),相對它的路徑來查詢配置檔案。 選項: path - 用於查詢配置檔案的檔案或目錄路徑。預設是 '..' env - 使用配置的環境。預設是 'production' stats - 自定義的使用情況統計資料 config - 手動設定的配置路徑 ignoreUnknownVersions - 不要直接給出查詢字串(例如:ie 12),是 boolean 型別。預設是 false dangerousExtend - 禁用 'extend' 查詢的安全檢查。預設是 false 對於 '非-JS' 環境的除錯,可以使用 CLI 工具: browserslist "> 1%, IE 10" 覆蓋率 可以通過 JS API 獲得所選瀏覽器的總使用者的覆蓋率: browserslist.coverage(browserslist('> 1%')) browserslist.coverage(browserslist('> 1% in US'), 'US') browserslist.coverage(browserslist('> 1% in my stats'), 'my stats') browserslist.coverage(browserslist('> 1% in my stats', { stats }), stats) 或者通過 CLI 來獲取: browserslist --coverage "> 1%" browserslist --coverage=US "> 1% in US" browserslist --coverage "> 1% in my stats" browserslist --coverage "> 1% in my stats" --stats=./stats.json 快取 Browserslist 在託管期間,從 package.json 和 browserslist 配置檔案讀取配置並快取。 清除這些快取,使用: browserslist.clearCaches(); 要完全禁用快取,設定 'BROWSERSLIST_DISABLE_CACHE' 環境變數=1