0

我正在查看Babel 的 @babel/preset-env 文档,并注意到以下注释:

请注意,如果您依赖 browserslist 的默认查询(显式或没有 browserslist 配置),您将需要查看 No targets 部分以获取有关 preset-env 行为的信息。

这是引用的No targets 部分的摘录。

当没有指定目标时:Babel 会假设你的目标是最旧的浏览器。例如,@babel/preset-env 会将所有 ES2015-ES2020 代码转换为 ES5 兼容。

因此,Babel 的行为与 browserslist 不同:当在 Babel 或 browserslist 配置中没有找到目标时,它不使用默认查询。如果要使用默认查询,则需要将其作为目标显式传递:

让我感到困惑的那一行: “当您的 Babel 或browserslist 配置中没有找到目标时,它不使用默认查询”。如果 中有一个默认查询,那.browserslistlrc不意味着 browserslist 配置中有一个目标吗?文件的全部意义不.browserslistrc在于有一个集中的位置来引用您的目标浏览器吗?维护两个独立的位置似乎容易出错。

我决定调查并打开debugBabel 的标志。此时我的.babelrc文件没有列出明确的目标,而我.browserslistrc只是列出了defaults. 运行 Babel 时,我在终端中得到以下输出:

Using targets:
{}

当我添加一个明确"targets": "defaults"的 to.babelrc时,输出发生了变化,现在列出了目标浏览器:

Using targets:
{
  "android": "84",
  "chrome": "83",
  "edge": "84",
  "firefox": "78",
  "ie": "11",
  "ios": "12",
  "opera": "70",
  "safari": "13.1",
  "samsung": "11.1"
}

defaults为了增加我的困惑,此列表与运行时 browserslist 报告的不匹配npx browserslist defaults

and_chr 97
and_ff 96
and_qq 10.4
and_uc 12.12
android 97
baidu 7.12
chrome 98
chrome 97
chrome 96
edge 98
edge 97
edge 96
firefox 96
firefox 95
firefox 91
firefox 78
ie 11
ios_saf 15.2-15.3
ios_saf 15.0-15.1
ios_saf 14.5-14.8
ios_saf 14.0-14.4
ios_saf 12.2-12.5
kaios 2.5
op_mini all
op_mob 64
opera 83
opera 82
safari 15.2-15.3
safari 15.1
safari 14.1
samsung 16.0
samsung 15.0

任何人都可以澄清这里发生了什么,并推荐一个最佳实践,如果你使用defaultsbrowserslist 查询@babel/preset-env

4

0 回答 0