当前位置: 首页 > 知识库问答 >
问题:

前端 - webpack cra项目中babel配置?

宋烨烁
2024-06-11

在使用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,  },},

共有1个答案

宗弘扬
2024-06-11

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 中的代码时。

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

 类似资料:
  • 请教echarts像这种有虚线的柱状图该怎么配置,翻阅了资料也没有达到这个效果

  • 你或许已经注意到了,目前为止通过运行 Babel 自己我们并没能“翻译”代码,而仅仅是把代码从一处拷贝到了另一处。 这是因为我们还没告诉 Babel 要做什幺。 由于 Babel 是一个可以用各种花样去使用的通用编译器,因此默认情况下它反而什幺都不做。你必须明确地告诉 Babel 应该要做什幺。 你可以通过安装插件(plugins)或预设(presets,也就是一组插件)来指示 Babel 去做什

  • Babel 也由配置文件!许多其他工具都有类似的配置文件:ESLint (.eslintrc)、Prettier (.prettierrc)。 所有 Babel API 参数 都可以被配置。然而,如果该参数需要用到 JavaScript 代码,你可能需要使用 JavaScript 代码版的 配置文件。 你的使用场景是什么? 你是否希望以编程的方式创建配置文件? 你是否希望编译 node_modul

  • 这些自己做的项目可以在面试加分嘛?前面两个是纯css画的 其他全是vue

  • 我有一个Gradle多项目构建,看起来像这样: 我希望将目录< code>shared中的所有项目作为依赖项添加到< code>plugins中的所有项目。 更一般地说:我如何按目录配置子项目? settings.gradle的内容: build.gradle的内容:

  • 项目配置 项目配置 配置简介 CAT上项目名称:项目接入CAT后的唯一标识,来识别自己 事业部:项目所属事业部 产品线:项目所属产品线 负责人:项目负责人,该项不做为告警联系人 项目组邮件:项目负责人邮件,或项目组产品线邮件,多个邮箱由英文逗号分割,不要留有空格;作为发送告警邮件、微信的依据 项目组号码:项目负责人手机号;多个号码由英文逗号分隔,不要留有空格;作为发送告警短信的依据 机器分组配置

  • 我正在尝试将后端项目myonlinebackend与前端项目myonlineshopping链接起来,在添加“private session factory session factory;”之前,它工作得很好去CategoryDAOImpl.java。但是在声明了sessionFactory变量之后,我得到了下面这个错误。 这是我的课程: 类别.java CategoryDAOImpl.java