与 @babel/env 和 @babel/preset-env 之间的 babel 预设配置混淆

whi*_*idy 41 javascript babeljs

我尝试配置一个环境来使用 babel 和 webpack 开发 javascript。

但我不明白关于presets.

使用指南中,我们可以看到带有"@babel/env".

但是在文档的其他地方,我看不到更多这样的配置,而不是"@babel/preset-env". 例如这里https://babeljs.io/docs/en/babel-preset-env

我无法找出之间的差异"@babel/env",并"@babel/preset-env"一次又一次地到处跟我的英语不好,我真的看文件,没有运气。

也许他们是一样的?

顺便说一句,目标集似乎不起作用,删除目标在ie9+(或默认目标是什么)中也可以正常运行,如果我希望我的es6脚本可以转换为兼容ie8,因此这不是最重要的。

这是我的项目sdk-dev-env

// https://babeljs.io/docs/en/configuration
const presets = [
  [
    '@babel/env',
    {
      // https://babeljs.io/docs/en/babel-preset-env#targets
      // TODO: how to compatibilite with ie 8
      targets: {
        ie: '8',
        edge: '17',
        firefox: '60',
        chrome: '67',
        safari: '11.1'
        /**
         * you can also set browsers in package.json
         * "browserslist": ["last 3 versions"]
         * relative links:
         * https://github.com/browserslist/browserslist
         */
      },
      corejs: '3',
      // corejs: { version: 3, proposals: true },
      /**
       * https://babeljs.io/docs/en/usage#polyfill
       * https://github.com/zloirock/core-js#babelpreset-env
       * "usage" will practically apply the last optimization mentioned above where you only include the polyfills you need
       */
      useBuiltIns: 'usage'
    }
  ]
]
const plugins = []

if (process.env['ENV'] === 'prod') {
  // plugins.push(...);
}
module.exports = { presets, plugins }
Run Code Online (Sandbox Code Playgroud)

我希望知道它们是否相同,如果不同,有什么不同。

以及在 core-js 3 中使用 babeljs 7.4 的最佳方式

log*_*yth 56

也许他们是一样的?

没错,这preset-件作品是可选的。既然你在做

presets: ["@babel/env"]
Run Code Online (Sandbox Code Playgroud)

Babel 已经知道它是一个预设,因为它在presets数组中,所以它会preset-自动添加到模块名称中。

这也适用于plugins

有关更多示例,请参阅Babel 问题中的表格。

  • 谢谢。FFS,这就是那种毫无帮助、只会迷惑人的“魔法”。难怪前端工具看起来像是一场永无休止的配置噩梦。 (54认同)