掌握 Babel 配置:项目范围与文件相关配置全解析(2)

Babel 配置文件

Babel 的配置文件用于指定编译选项,包括使用的插件、预设、目标浏览器等。配置文件可以分为项目范围的配置文件和文件相关的配置文件。

1. 配置文件格式

项目范围配置文件

  • babel.config.js
  • babel.config.json
  • babel.config.cjs
  • babel.config.mjs
  • babel.config.cts

这些配置文件通常放在项目的根目录下,并对整个项目生效。

文件相关配置文件

  • .babelrc
  • .babelrc.js
  • .babelrc.json
  • .babelrc.cjs
  • .babelrc.mjs
  • .babelrc.cts
  • package.json 中的 babel

这些配置文件对特定的文件或目录及其子目录生效。

2. 结构示例

假设有一个项目结构如下:

/my-project
|-- frontend
|   |-- .babelrc.json
|   |-- src
|-- backend
|   |-- .babelrc.json
|   |-- src
|-- babel.config.json
  • babel.config.json 配置如下:

    {
      "presets": [
        "@babel/preset-env"
      ]
    }
    

    这个配置在整个项目中都会被使用。

  • frontend/.babelrc.json 配置如下:

    {
      "plugins": [
        "@babel/plugin-transform-react-jsx"
      ]
    }
    

    这个配置只会在 frontend 目录范围内生效。Babel 在编译 frontend 目录下的文件时,会自动合并多个配置文件,最终应用 @babel/preset-env@babel/plugin-transform-react-jsx

3. 配置文件选项

Babel 支持多种配置项,官方文档详细列出了所有选项。以下是一些常见的配置项:

插件和预设配置
  • plugins: 配置要使用的插件,值为一个数组,可以配置多个插件。

    {
      "plugins": [
        ["@babel/plugin-transform-arrow-functions", {}]
      ]
    }
    
  • presets: 配置要使用的预设,值为一个数组,可以配置多个预设。

    {
      "presets": [
        "@babel/preset-env"
      ]
    }
    
输出目标选项
  • targets: 指定要兼容的浏览器版本范围。

    {
      "targets": "> 0.25%, not dead"
    }
    

    浏览器范围的指定方式有多种,例如在项目根目录下创建 .browserslistrc 文件或在 package.json 中通过 browserslist 键来指定。优先级顺序如下:

    1. targets
    2. .browserslistrc
    3. package.json
  • browserlistConfigFile: 默认值是 true,表示允许 Babel 去搜寻项目中的 .browserslistrcpackage.json 中的 browserslist 配置。也可以指定具体的路径。

    {
      "presets": [
        [
          "@babel/preset-env",
          {
            "browserslistConfigFile": "./.browserslistrc"
          }
        ]
      ]
    }
    
配置合并选项
  • extends: 扩展其他 Babel 配置文件,可以提供一个路径。

    {
      "extends": "./base.babelrc.json"
    }
    
  • env: 为不同的环境提供不同的配置。

    {
      "env": {
        "development": {
          "plugins": ["pluginA"]
        },
        "production": {
          "plugins": ["pluginB"]
        }
      }
    }
    
  • overrides: 对匹配上的特定文件或目录应用不同的配置。

    {
      "overrides": [
        {
          "test": ["*.ts", "*.tsx"],
          "exclude": "node_modules",
          "presets": ["@babel/preset-typescript"]
        }
      ]
    }
    
  • ignore 和 only: 控制忽略文件和指定特有文件。

    {
      "ignore": ["node_modules"],
      "only": ["src"]
    }
    
源码映射选项
  • sourceMaps: 是否生成 source map。

    {
      "sourceMaps": true
    }
    
  • sourceFileName: 指定 source map 文件的文件名。

    {
      "sourceFileName": "customFileName.js"
    }
    
  • sourceRoot: source map 文件对应的 URL 前缀。

    {
      "sourceMaps": true,
      "sourceRoot": "/root/path/to/source/files/"
    }
    
其他选项
  • sourceType: 指定 Babel 如何解析 JS 代码。

    • "module": 如果你的代码使用 ESM 模块化(涉及 exportimport)。
    • "script": 普通的 JS 脚本,没有使用模块化。
    • "unambiguous": 让 Babel 自己判断,如果代码使用了 exportimport,则视为模块文件,否则视为普通的脚本文件。
  • assumptions: 从 Babel 7.13.0 开始引入的一项配置项,让开发者对自己的代码做一个假定(更像是对 Babel 的一个承诺)。

    {
      "assumptions": {
        "noClassCalls": true
      }
    }
    

    上面的配置表示代码中不会直接调用类(不会像调用函数一样去调用类),Babel 可以省略生成检查类是否被正确调用的代码。

总结

通过上述配置文件和选项,你可以灵活地控制 Babel 的行为,确保代码在不同环境中都能正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值