8

我正在 npm 脚本中使用 browserslist 测试 Babel。

这是我当前的 package.json,其中 Babel 正在执行我期望的操作:

{
  "name": "npm-scripts-igloo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "devserver": "live-server",
    "watch-sass": "node-sass sass/style.scss css/style.css --output-style expanded --watch",
    "compile-sass": "node-sass sass/style.scss css/style.compiled.css --output-style expanded",
    "prefix-css": "postcss css/style.compiled.css --use autoprefixer -o css/style.prefix.css",
    "compress-css": "node-sass css/style.prefix.css css/style.min.css --output-style compressed",
    "build-css": "npm-run-all compile-sass prefix-css compress-css",
    "babel": "babel app.js --watch -o js/app.compiled.js",
    "start": "npm-run-all -p devserver watch-sass babel"
  },
  "browserslist": [
    "last 5 versions"
  ],
  "babel": {
    "presets": [
      [
        "env",
        {
          "targets": {
            "browsers": [
              "cover 99.5%"
            ]
          }
        }
      ]
    ]
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@fortawesome/fontawesome-free": "^5.6.1",
    "autoprefixer": "^9.4.7",
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "live-server": "^1.2.1",
    "node-sass": "^4.11.0",
    "npm-run-all": "^4.1.5",
    "postcss-cli": "^6.1.1"
  }
}

我没有使用 .babelrc 文件或任何其他 Babel 配置。

我尝试使用 browserslist 键定位 Edge 16:

"browserslist": [
    "Edge 16"
  ]

使用此配置,Babel 不应转换constvar,但它确实如此,如下所述: Babel 不会更改 const,因为 Edge 16 支持它 https://github.com/browserslist/browserslist-example

但是,如果我使用 babel 键定位 Edge 16:

"babel": {
    "presets": [
      [
        "env",
        {
          "targets": {
            "browsers": [
              "Edge 16"
            ]
          }
        }
      ]
    ]
  }

然后 Babel 不会正确更改const为,var因为 Edge 16 支持它。

我更喜欢使用 browserslist 键,因为这是推荐的做法 https://github.com/browserslist/browserslist

此外,我可以简单地与 autoprefixer 共享这个 browserslist 选项,这就是它应该如何工作的。

但是,问题是 Babel 似乎忽略了 browserslist 键。

如果我使用包含以下内容的 .browserslistrc 文件,情况也是如此:

Edge 16

这张幻灯片上有一个带星号的注释: https ://slides.com/ai/browserslist#/14 报告: 只有 Babel 7 支持配置文件

所以,我尝试将 Babel 更新到 v7:

npm install @babel/core -D

这在 devDependencies 中产生了以下内容:

"@babel/core": "^7.3.4"

不幸的是,这似乎没有任何区别。

所以,我的问题是:

  1. 为什么 browserslist 键似乎没有影响 Babel?我的语法有问题吗?

  2. browserslist 键出现在 package.json 中的哪个位置是否重要?即关键顺序重要吗?

4

2 回答 2

1

尝试清理缓存node_modules/.cache/babel-loader

于 2020-12-11T06:02:17.827 回答
0

它对我使用 babel@7.6.0 并在 .babelrc fie 中使用以下配置

'@babel/preset-env', {
   'useBuiltIns': 'usage',
   'corejs': 3,
   'targets': {
     'browsers': ['chrome 74']
    }
 }

在这里找到更多信息。

or 组合器可以使用关键字 or 以及 ,。last 1 version or > 1% 等于 last 1 version, > 1%。

和查询组合也支持执行前一个查询的交集:last 1 version and > 1%。

于 2019-09-22T17:03:34.090 回答