• Vue生态圈之----Vue CLI3学习整理----browserslist


    你会发现有 package.json 文件里的 browserslist 字段 (或一个单独的 .browserslistrc 文件),指定了项目的目标浏览器的范围。这个值会被 @babel/preset-envAutoprefixer 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

    Browserslist 

    在不同前端工具之间共享目标浏览器和Node.js版本的配置。它用于:

    所有工具将自动找到目标浏览器,当您添加以下package.json:

    "browserslist": [
        "last 1 version",
        "> 1%",
        "maintained node versions",
        "not dead"
      ]  

    或者使用 .browserslistrc配置文件:

    # Browsers that we support
    
    last 1 version
    > 1%
    maintained node versions
    not dead
    

    开发人员在类似于 “last 2 version“ 的查询中将版本列表设置为不需要手动更新版本。Browserslist将使用Can I use 数据查询。

    Browserslist将从工具选项、Browserslist配置、.browserslistrc配置、package.json的Browserslist字段或环境变量中获取查询。

    您可以在在线演示中测试Browserslist查询。Browserslist示例显示了每个工具如何使用Browserslist。

    目录

    1. Tools
    2. Best Practices
    3. Queries
    4. Config File
    5. Configuring for Different Environments
    6. Custom Usage Data
    7. JS API
    8. Environment Variables
    9. Cache

    工具

    • browserslist-ga:下载您的网站浏览器统计数据,使用它在 ”> 0.5% in my stats" 查询。
    • Browserslist -useragent- RegExp:将Browserslist查询编译为RegExp以测试浏览器用户代理。
    • Browserslist -useragent- Ruby:是一个Ruby库,用于通过用户代理字符串检查浏览器以匹配Browserslist。
    • Browserslist - BrowserStack:在Browserslist 配置中为所有浏览器运行BrowserStack测试。
    • caniuse-api:返回支持某些特定特性的浏览器。
    • 在项目目录中运行 “npx browserslist” 以查看项目的目标浏览器。这个CLI工具是内置的,可以在任何带有Autoprefixer的项目中使用。

    最佳实践

    •  直接选择浏览器(last 2 Chrome versions),只有当你正在为一个浏览器制作一个web应用程序。市场上有很多浏览器。如果你正在制作一个通用的web应用程序,你应该尊重浏览器的多样性。
    • 有一个 “default” 查询,它为大多数用户提供了一个合理的配置:
    "browserslist": [
        "defaults"
      ]
    
    • 如果你想改变默认的浏览器设置,我们建议把 “last 1 version, not dead“ 和 "> 0.2% (或 > 1% in US, > 1% in my stats). last n versions” 添加了太多的固定浏览器,并且没有添加流行的旧版本。从长远来看,选择一个高于0.2%的百分比将使流行的浏览器更加流行。我们可能会陷入垄断和停滞的境地,就像ie 6那样。请谨慎使用此设置。
    • 不要因为不了解浏览器就删除它们。Opera Mini在非洲拥有1亿用户,在全球市场上比微软Edge更受欢迎。中国QQ浏览器的市场份额超过了Firefox和桌面Safari之和。

    问题

    Browserslist将使用浏览器和Node.js版本查询从以下的其中一个来源:

    1. 当前或父目录中的package.json中的 browserslist 关键字。我们建议这样做。
    2. 当前或父目录中的.browserslistrc配置文件。
    3. 当前或父目录中的browserslist配置文件。
    4. 环境变量 BROWSERSLIST。
    5. 如果上面的方法没有产生一个有效的结果,Browserslist将使用默认值: “> 0.5%”,last 2 versions,Firefox ESR,not dead。

    组合查询

     "or" 组合器可以使用关键字 "or“ 就像 ”,“。"last 1 version or > 1%"相当于”last 1 version, > 1%

    ”and“ 还支持组合查询来执行前一个查询的交集:”last 1 version and > 1%“。

    有3种不同的方法来组合查询,如下所示。首先,您从一个查询开始,然后我们将这些查询组合起来以得到最终的列表。

    显然,您不能从 ”not“ 组合器开始,因为没有用于组合它的左侧查询。

    组合器说明例子
    or/, 
    (联合)
    Union of queries > .5% or last 2 versions
    > .5%, last 2 versions
    and
    (交叉
    intersection of queries > .5% and last 2 versions
    not
    (相对补充)
    Relative complement of queries > .5% and not last 2 versions
    > .5% or not last 2 versions
    > .5%, not last 2 versions

    测试查询的一个快速方法是在终端中运 ”npx browserslist '> 0.5%,not IE 11'"。

    完整列表

    您可以通过查询(不区分大小写)指定浏览器和Node.js版本:

    > 5%:由全球使用统计数据选择的浏览器版本。>=, <和<=也可以运行。

    > 5% in US:使用美国使用统计。它接受两个字母的国家代码

    > 5% in alt-AS:使用亚洲地区的使用统计。所有区域代码的列表可以在caniuse-lite/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 Foundation维护

    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更新的Firefox版本。>=, <和<=也可以运行。它也适用于Node.js。

    iOS 7:直接使用iOS浏览器版本7。

    Firefox ESR:最新的[Firefox ESR]版本。

    unreleased versions 或 unreleased Chrome versions:alpha和beta版本。

    last 2 major versions 或 last 2 ios major versions:所有次要/补丁版本的最后两个主要版本。

    since 2015 或last 2 years:2015年(也可以 2015-03和2015-03-10)以来发布的所有版本。

    dead:来自上两个版本查询的浏览器,但在全球使用统计中占不到0.5%,并且24个月没有官方支持或更新。现在是IE 10、IE_Mob 10、BlackBerry 10、BlackBerry 7和OperaMobile 12.1。

    last 2 versions:每个浏览器的最后两个版本。

    last 2 Chrome versions:最后2个Chrome浏览器版本。

    defaults:Browserslist默认浏览器(> 0.5%,last 2 versions,Firefox ESR,not dead)。

    not ie <= 8:排除以前查询选择的浏览器。

    您可以向任何查询添加 “not”。

     Debug 调试

    在项目目录中运行 "npx browserslist",查看您的查询选择了哪些浏览器。

    Browsers 浏览器

    名称不区分大小写:

    • Android for Android WebView.
    • Baidu for Baidu Browser.
    • BlackBerry or bb for Blackberry browser.
    • Chrome for Google Chrome.
    • ChromeAndroid or and_chr for Chrome for Android
    • Edge for Microsoft Edge.
    • Electron for Electron framework. It will be converted to Chrome version.
    • Explorer or ie for Internet Explorer.
    • ExplorerMobile or ie_mob for Internet Explorer Mobile.
    • Firefox or ff for Mozilla Firefox.
    • FirefoxAndroid or and_ff for Firefox for Android.
    • iOS or ios_saf for iOS Safari.
    • Node for Node.js.
    • Opera for Opera.
    • OperaMini or op_mini for Opera Mini.
    • OperaMobile or op_mob for Opera Mobile.
    • QQAndroid or and_qq for QQ Browser for Android.
    • Safari for desktop Safari.
    • Samsung for Samsung Internet.
    • UCAndroid or and_uc for UC Browser for Android.
    • kaios for KaiOS Browser.

    配置文件

    package.json

    如果希望减少项目根目录中的配置文件,可以在package.json中指定browserslist关键字:

    {
      "private": true,
      "dependencies": {
        "autoprefixer": "^6.5.4"
      },
      "browserslist": [
        "last 1 version",
        "> 1%",
        "IE 10"
      ]
    }
    

    .browserslistrc

     分隔的Browserslist配置应该命名为.browserslistrc,并将浏览器查询按新行分割。注释以#符号开头:

    # Browsers that we support
    
    last 1 version
    > 1%
    IE 10 # sorry
    

    Browserslist将检查 path 中的每个目录中的配置。如: app/styles/main.css,你可以把配置设置为root, app/ 或 app/styles。

    您可以在 BROWSERSLIST_CONFIG 环境变量中指定直接路径。

    可共享的配置

    您可以使用以下查询从另一个包引用导出的Browserslist 配置:

    "browserslist": [
        "extends browserslist-config-mycompany"
      ]
    

    出于安全原因,外部配置只支持具有 “browserslist-config-” 前缀的包。通过使用@scope/browserslist-config(如@scope/browserslist-config或@scope/browserslist-config-mycompany)为模块命名或前缀,还支持npm作用域包。

    如果你不接受用户的Browserslist查询,你可以使用 dangerousExtend 选项禁用验证:

    browserslist(queries, { path, dangerousExtend: true })
    

    因为使用了npm的 resolution,你也可以在包中引用特定的文件:

    "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_ENV 或 NODE_ENV 变量选择查询。如果没有声明它们,Browserslist将首先查找生产查询,然后使用默认值。

    //package.json
    
    "browserslist": {
        "production": [
          "> 1%",
          "ie 10"
        ],
        "modern": [
          "last 1 chrome version",
          "last 1 firefox version"
        ],
        "ssr": [
          "node 12"
        ]
      }
    
    //.browserslistrc 
    
    [production]
    > 1%
    ie 10
    
    [modern]
    last 1 chrome version
    last 1 firefox version
    
    [ssr]
    node 12
    

    自定义数据

    如果您有一个网站,您可以查询您的网站的使用统计数据。browserslist-ga将请求访问谷歌分析,然后生成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

    const browserslist = require('browserslist')
    
    // Your CSS/JS build tool code
    function process (source, opts) {
      const browsers = browserslist(opts.overrideBrowserslist, {
        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 选项(可以是一个文件)来查找相对于它的配置文件。

    Options 选项:

    • path:查找配置文件的文件或目录路径。默认是"."。
    • env:环境变量使用什么配置。默认是“production”。
    • stats:自定义使用统计数据。
    • config:如果您想手动设置配置,可以设置到配置的路径。
    • ignoreUnknownVersions:不要抛出直接查询(如ie 12)。默认值 false。
    • dangerousExtend:禁用扩展查询的安全检查。默认值 false。
    • mobileToDesktop:如果可以的话,使用桌面浏览器。例如,Browserslist将返回chrome 20 在 and_chr 20查询(Can I Use 只使用最新版本的移动浏览器的数据),默认值 false。

    对于非js环境和调试目的,您可以使用CLI工具:

    browserslist "> 1%, IE 10"

    你可以通过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

    或通过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

    环境变量

    如果一些工具使用Browserslist,你可以通过环境变量改变浏览器设置:

    • BROWSERSLIST 带有浏览器查询。
    BROWSERSLIST="> 5%" gulp css
    • BROWSERSLIST_CONFIG 带有配置文件的路径。
    BROWSERSLIST_CONFIG=./config/browserslist gulp css
    • BROWSERSLIST_ENV,带有environments字符串。
    BROWSERSLIST_ENV="development" gulp css
    • BROWSERSLIST_STATS 在我的stats查询中提供了指向 “> 1% in my stats” 的查询。
    BROWSERSLIST_STATS=./config/usage_data.json gulp css
    • BROWSERSLIST_DISABLE_CACHE 禁用配置读取缓存。
    BROWSERSLIST_DISABLE_CACHE=1 gulp css

    缓存

    Browserslist缓存从package.json中读取的配置和browserslist文件,以及关于文件存在的信息,用于托管过程的持续时间。

    要清除这些缓存,请使用:

    browserslist.clearCaches()

    要完全禁用缓存,请设置 BROWSERSLIST_DISABLE_CACHE 环境变量。

    联系

     若要报告安全漏洞,请使用Tidelift联系人。Tidelift将协调修复和披露。

  • 相关阅读:
    log4net使用封装,无缝切换 dotnet 和 dotnetcore
    使用 certbot 申请泛域名https证书
    StackExchange.Redis中文使用文档
    在 asp.net core 中使用类似 Application 的服务
    不一样的 SQL Server 日期格式化
    你可能不知道的 docker 命令的奇淫怪巧
    [k8s]dashboard1.8.1搭建( heapster1.5+influxdb+grafana)
    [k8s]k8s 1.9(on the fly搭建) 1.9_cni-flannel部署排错 ipvs模式
    [k8s] kubelet单组件启动静态pod
    [svc]runinit管理多进程
  • 原文地址:https://www.cnblogs.com/adhehe/p/13385045.html
Copyright © 2020-2023  润新知