webpack cra项目中babel配置?

在使用cra脚手架创建的项目中,有两个关于babel的配置,一个是针对src目录的js文件,一个是针对其他的js文件,请问这些配置有啥作用呢,求大佬详细解释!!!

{
  test: /\.(js|mjs|jsx|ts|tsx)$/,
  include: paths.appSrc,
  loader: require.resolve('babel-loader'),
  options: {
    customize: require.resolve(
      'babel-preset-react-app/webpack-overrides'
    ),
    presets: [
      [
        require.resolve('babel-preset-react-app'),
        {
          runtime: hasJsxRuntime ? 'automatic' : 'classic',
        },
      ],
    ],
    
    plugins: [
      isEnvDevelopment &&
        shouldUseReactRefresh &&
        require.resolve('react-refresh/babel'),
    ].filter(Boolean),
    // This is a feature of `babel-loader` for webpack (not Babel itself).
    // It enables caching results in ./node_modules/.cache/babel-loader/
    // directory for faster rebuilds.
    cacheDirectory: true,
    // See #6846 for context on why cacheCompression is disabled
    cacheCompression: false,
    compact: isEnvProduction,
  },
},
// Process any JS outside of the app with Babel.
// Unlike the application JS, we only compile the standard ES features.
{
  test: /\.(js|mjs)$/,
  exclude: /@babel(?:\/|\\{1,2})runtime/,
  loader: require.resolve('babel-loader'),
  options: {
    babelrc: false,
    configFile: false,
    compact: false,
    presets: [
      [
        require.resolve('babel-preset-react-app/dependencies'),
        { helpers: true },
      ],
    ],
    cacheDirectory: true,
    // See #6846 for context on why cacheCompression is disabled
    cacheCompression: false,
    
    // Babel sourcemaps are needed for debugging into node_modules
    // code.  Without the options below, debuggers like VSCode
    // show incorrect code and set breakpoints on the wrong lines.
    sourceMaps: shouldUseSourceMap,
    inputSourceMap: shouldUseSourceMap,
  },
},
阅读 701
avatarAI BotBETA

webpack 和 CRA(Create React App)项目中 Babel 的配置是为了确保项目中的 JavaScript 代码能够正确地被转换和编译,以便在各种浏览器和环境中都能运行。

第一个配置(针对 src 目录的 JS 文件)

这个配置主要用于处理项目 src 目录下的 .js, .mjs, .jsx, .ts, .tsx 文件。

  • customize: 使用 babel-preset-react-app/webpack-overrides 自定义 Babel 配置,可能包含了一些针对 webpack 的特定优化或配置。
  • presets: 使用了 babel-preset-react-app,这个预设包含了 React 和现代 JavaScript 特性所需的所有 Babel 插件。runtime 选项用于控制 JSX 转换的运行时行为,automatic 对应于新的 JSX 转换方式,classic 对应于旧的 React.createElement 转换方式。
  • plugins: 如果处于开发环境且启用了 React Refresh,则添加 react-refresh/babel 插件,用于实现组件的热重载。
  • cacheDirectorycacheCompression: 缓存 Babel 编译结果以加快构建速度,但禁用了压缩以提高缓存的稳定性。
  • compact: 在生产环境下,输出更紧凑的代码。

第二个配置(针对其他 JS 文件)

这个配置主要用于处理项目 node_modules 或其他非 src 目录下的 .js, .mjs 文件。

  • exclude: 排除 @babel/runtime 相关的包,因为它们通常已经预编译过。
  • babelrcconfigFile: 设置为 false,意味着不使用项目根目录或特定于文件的 Babel 配置文件(.babelrcbabel.config.js)。
  • presets: 使用 babel-preset-react-app/dependencies,这个预设只包含转换项目依赖中使用的 JavaScript 特性所需的插件,不包括 React 相关的转换。
  • helpers: 设置为 true,确保辅助函数(如 _extends)被引入而不是内联,以减少重复代码。
  • cacheDirectorycacheCompression: 与第一个配置类似,用于缓存和性能优化。
  • sourceMaps: 如果启用了 source map,则生成 Babel 的 source map,这对于调试非常有用,尤其是当错误发生在 node_modules 中的代码时。

总的来说,这两个配置针对不同的文件和场景进行定制,以确保项目代码能够正确、高效地编译和运行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏