preset-env 和 core-js 似乎没有使用 browserslist

Posted

技术标签:

【中文标题】preset-env 和 core-js 似乎没有使用 browserslist【英文标题】:preset-env and core-js don't seem to use browserslist 【发布时间】:2019-09-07 13:41:48 【问题描述】:

使用official docs 我一直在尝试使用@babel/preset-envcore-js.browserslist 文件来设置最佳构建配置。

据我了解文档,他们说 preset-envuseBuiltins:"usage" 将更新我的代码中的 import 'core-js/stable' 语句,只包含所需的函数。

但是,无论我设置last 1 chrome version 还是>1% in NL(它们是相当多和旧的浏览器),构建文件的大小都是相同的(大约 3MB)。

我错过了什么?

我在这里有一个测试仓库:https://github.com/publicJorn/jorns-react-starter

为了快速参考,相关文件:

.babelrc


  "presets": [
    [
      "@babel/preset-env",
      
        "useBuiltIns": "usage",
        "corejs":  "version": 3, "proposals": true 
      
    ],
    "@babel/preset-react"
  ],
  "plugins": [
    [
      "@babel/plugin-proposal-object-rest-spread",
      
        "useBuiltIns": true
      
    ],
    ["@babel/plugin-proposal-class-properties"],
    ["@babel/plugin-syntax-dynamic-import"],
    ["babel-plugin-styled-components"]
  ]

webpack 部分

module: 
    rules: [
      
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: ['babel-loader']
      
    ]
  ,

.browserslistrc

> 1% in NL
ie 11
not ie < 11

index.js

import 'core-js/stable'

// etc..

【问题讨论】:

【参考方案1】:

如果 useBuiltIns 被使用,则始终使用捆绑的 polyfill。

如果 useBuiltIns 是 entry,它将通过 browserslist 捆绑 polyfill。不要忘记导入 core-js 手册,例如

import 'core-js/stable';
import 'regenerator-runtime/runtime';

但它应该捆绑未使用的 polyfill,因为它只是捆绑在您的浏览器列表中。

【讨论】:

以上是关于preset-env 和 core-js 似乎没有使用 browserslist的主要内容,如果未能解决你的问题,请参考以下文章

如何将 core-js 更新为 core-js@3 依赖项?

未找到此依赖项:* core-js/fn/symbol

导入 ES6 和 ES7 core-js polyfill 有啥用?

npm 包似乎已损坏

core-js介绍及安装使用

@babel/preset-env useBuiltIns 说明