首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在带有cssmodules的CRA中使用react lazy会导致块在生产中具有重复的css

在带有cssmodules的CRA(Create React App)中使用React Lazy可能会导致块在生产环境中具有重复的CSS。这个问题主要是由于Webpack的代码拆分和动态导入导致的。

在使用React Lazy进行组件懒加载时,Webpack会将懒加载的组件代码拆分为单独的块,以减小初始加载的文件大小。然而,由于CSS模块化(CSS modules)的特性,样式也会被当做模块处理并拆分到对应的块中。

在生产环境中,当多个组件使用相同的CSS模块时,由于代码拆分导致的块重复加载,这些块可能会包含相同的CSS模块,从而导致重复的CSS。

要解决这个问题,可以尝试以下几种方法:

  1. 使用Webpack的SplitChunks插件进行更细粒度的代码拆分配置,以避免重复的CSS模块被拆分到不同的块中。
  2. 在Webpack的配置文件中,通过optimization.splitChunks.cacheGroups选项,将共享相同CSS模块的组件归为同一个块,避免重复加载。
  3. 使用CSS的全局样式(global styles)来替代CSS模块,将样式直接应用于整个应用程序,而不是模块化处理。
  4. 如果不使用CSS模块化,可以考虑在Webpack配置中禁用CSS模块化,以避免重复的CSS模块。

需要注意的是,以上方法都需要在Webpack配置文件中进行相应的修改。此外,对于不同的项目和具体场景,可能需要综合考虑实际情况来选择合适的解决方案。

关于腾讯云相关产品和产品介绍链接地址,由于要求不提及具体的云计算品牌商,无法提供具体的链接。但腾讯云提供了丰富的云计算服务和解决方案,可以根据具体需求查阅腾讯云官方文档或与腾讯云技术支持联系获取更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

快将你 React 应用迁移到 Vite 吧,速度太快啦

大多数人使用 Create React App 来创建 React App。虽然它支持所有开箱即用配置。...我们可以迁移到 Vite,而不是使用 CRA 来创建 React App。Vite 是下一代前端工具,可以更快地构建应用程序。...对 TypeScript、JSX、CSS具备开箱即用支持。 支持多页面构建。 具有完整 TypeScript 类型 API。 支持 React、Vue、Preact、Svelte。...Vite 通过将应用程序模块分为两类:依赖项和源代码来改进开发服务器启动时间。 依赖项大多是纯 JavaScript,开发过程不会经常更改。...Vite 使用与 Rollup 相同 bundle 方法进行生产构建,因为在生产中使用未捆绑原生 ESM 导致额外 HTTP 请求。

1.3K20

我们如何使用 Next.js 将 React 加载时间缩短 70%

Next.js 是一个框架,带有构建工具和运行时库,用于创建丰富 React 应用程序。...它具有CRA 相同功能,但也包括对 CRA 所缺少关键功能内置支持:页面路由、基于页面内容智能预加载,以及混合静态和服务器端渲染。...样式 Causal 代码库许多旧 CSS 文件是团队对 CSS 模块最佳实践进行标准化之前编写。...其中一些文件使用了“不纯” CSS 选择器,这意味着它们可能影响页面上其他地方组件所呈现元素。...这使得前端修改代码审查体验得到了数量级改善。审查者只需点击他们正在审查 PR 一个链接,就可以准确地预览该分支在生产中样子,而不需要在本地拉出分支来进行测试。

4.8K10
  • 在线教育直播源码React特性解读

    React状态管理 React带有内置hooks来管理局部状态:useState、useReducer和useContext。所有这些都可以React中用于复杂本地状态管理。.../MobX/MobxStateTree   在线教育直播源码React样式库 虽然关于React样式处理有很多解决方法,但是作为一个React初学者,刚开始使用内联样式和基本CSS是很好。...1.1.png   虽然内联样式可以用JavaScriptReact动态地添加样式,但是一个外部CSS文件可以拥有React应用程序所有剩余样式。...CSSModules受到create-react-app支持,并为您提供了将CSS封装到模块方法。这样,它就不会意外地泄漏到其他人样式。...尽管应用程序某些部分仍然可以共享样式,但其他部分不必访问它。ReactCSSModules通常将CSS文件与React组件文件共存。

    1.4K40

    React教程:组件,Hooks和性能

    首先使用 Create React App(CRA)初始化一个新项目,然后开始开发。不过遗憾是,随着时间推移,代码可能变得难以维护,特别是在你不熟悉 React 情况下。...组件有可能变大,或者你可能最终得到一堆不是组件组件,最终你可能会到处编写重复代码。 这时候你就应该试着开始真正 React 之旅了 —— Think in React。...React 似乎推广了一些不仅在 React 变得普遍解决方案,例如最近集成 CRA CSS 模块,你可以在其中简单地导入 name.modules.css 并用其属性来调整组件样式(某些... React 另一个流行解决方案是 CSS-in-JS(例如,emotion 库)。再说一点,CSS 模块和 emotion(或者一般来说是CSS-in-JS)对 React 没有限制。...实际上并非如此,因为 React.lazy() 将显示我们 import() 组件,但 import() 可能获取比单个组件更大

    2.6K30

    干货 | 瘦身50%-70%,携程 Taro 小程序样式 Size 缩减方案

    一、概述 目前我们团队小程序是使用 Taro 跨端方案 React 框架进行开发,基于现有样式方案,在编译打包后会产生大量样式代码冗余,项目编译后产物占有较大比例。...配置后,在编译打包时,会使用实现了 cssModules 规范 css-loader 对 SCSS 等样式文件进行处理。...,逐渐递增生成 ClassName 也越来越长,反而导致总 ClassName 过长。...这是因为在打包后 JS 文件,保存有一份原 ClassName 与 hash 后新 ClassName 映射关系对象数据,因此运行时 styles 还能映射属性,但是这种处理方式导致 js 文件...因此项目中使用父子选择器这种方式来隔离作用域,导致大量祖先选择器冗余。

    46830

    延迟加载 React Components (用 react.lazy 和 suspense)

    虽然 React 16.8.1 终于面世 hooks 引人瞩目,但在去年发布 16.6.0 版本里也包含了一个吸引人新特性,可以让我们不依赖第三方库情况下简化对延迟加载(lazy loading...按照过往经验,构建组件时候,将其用类似 Bit 工具归纳起来是很有用 -- 可以分享你组件并在任意应用中使用之,以加速开发并保持 DRY 原则。 React.lazy() 是什么?...首先,打包工具将所有代码组件相继归纳到一个 javascript ,并将其传递给浏览器;但随着应用增长,我们注意到打包体积也与日俱增。这会导致应用因为加载慢而难以使用。...借助代码分割,代码包能被分割成更小,最重要先被加载,而其余次要则延迟加载。 同时,我们知道构建应用一个最佳实践是:应该考虑到用户使用移动互联网数据和其他慢速网络连接时情况。... index.js 头部引入 react lazy 和 suspense: import { Suspense, lazy } from 'react'; 要像常规组件一样渲染一个动态引入组件

    3.2K20

    改善你代码:使用这5种重构技术

    直到一个错误突然出现,需要相当长时间来解决它。有时,错误并不明显,因为代码按预期运行,但在生产中可能导致错误。可能会有性能和可访问性方面的错误,这会导致用户体验不佳。...重复代码可能导致多种问题,包括增加维护成本、难以对代码库进行更改以及引入错误风险更高。 重构代码时,必须注意查找重复代码。...以下是这些代码: 删除不必要变量和表达式:可能有一些用于调试变量或表达式被遗漏,例如JavaScriptconsole.log。 使用内置功能:有时使用库或语言内置功能更好。...这可以通过减少内存使用量来提高应用程序性能。这将加快应用程序加载速度。 这种技术Web开发中非常流行。尤其是React这样JavaScript框架,可以通过懒加载导入不同组件。..., { lazy, Suspense } from 'react'; const MyComponent = lazy(() => import('.

    32920

    React 组件化开发(一)

    本文主要内容 第三方组件使用方法 自定义组件 组件化实现技术 高阶组件 写react和传统js差不多。只是有一个设计思想贯穿了整个框架。...实际生产中需要做按需加载。 局部css 上讲留了一个坑,就是css全局污染问题。如何避免?...style loader 将CSS转换为注入 标记JS模块。 在生产环境,我们使用插件将该CSS提取到文件,但是 开发环境下,style loader启用CSS热编辑。...假设页面请求是每隔1s进行轮询。我们 Comment组件内打印记录,很好调试渲染次数。...但是非常复杂情况下,就需要对粒度很小组件进行处理。这就是高阶组件诞生背景。官方文档更加推荐这种写法,甚于传统继承写法。

    2.4K20

    前端工程化_知识点精讲

    常见脚手架工具 现在主流前端脚手架工具有两类: 名称 模板框架 多选项生产 支持自定义模板 特点 Create-React-App React 否 是 React 官方维护 Vue CLI Vue 是...为 CRA 创建自定义模板 作为一个最简化 CRA 模板,模板包含如下必要文件 README.md:用于 npm 仓库显示「模板说明」 package.json:用于描述模板本身「元信息」,...,所以最新版cra已经将dll剔除。...MiniCssExtractPlugin 对于 CSS 文件打包,一般我们会使用 style-loader 进行处理,这种处理方式最终打包结果就是 CSS 代码内嵌到 JS 代码 MiniCssExtractPlugin...目前还不支持使用缓存 使用缓存注意点 「如何最大程度地让缓存命中,成为我们选择缓存方案后首先要考虑」 缓存标识符发生变化导致缓存失效,支持缓存 Loader 和插件根据一些「固定字段值加上所处理模块或

    1.8K20

    React 组件库 CSS 样式问题分析

    首先分享一篇网易云音乐技术团队整理一篇文章 React 组件库 CSS 样式方案分析 目前存在问题: 1. antd 样式被重复引用,打包时被重复编译进 css 文件,造成代码冗余。 2....组件自定义样式没有通过类名区分,导致页面中使用多个组件时样式污染。...关于 CSS 样式冗余问题 是因为多个组件 less 文件引用了 antd.variable.less 文件,用来实现主题切换,打包时会重复/多次把这个文件编译进输出 css 文件。...同时组件开发,也可以把公共样式提取出来,减少冗余代码。 参考文献: 关于webpack打包时候css style重复问题(less) dumi 二次封装antd 遇到很多份重复样式覆盖?...参考文献: where() - CSS(层叠样式表) | MDN 学透CSS- :is 和 :where 让你CSS更简洁 reactsass使用,解决样式污染,样式穿透 未经允许不得转载:w3h5

    2.4K20

    精读《请停止 css-in-js 行为》

    消除了人肉 dom 和 css 之间做映射和切换痛苦,并且有大部分编辑器插件大力支持(语法高亮等)。此外,styled-components ReactNaive 尤其适用。...react-css-modules 代码示例: import React from 'react'; import CSSModules from 'react-css-modules'; import...不难想象,这种情况维护变量值最终是存储 js 更加妥当,然而 scss 给大家带来 css first 思想根深蒂固,导致许多基础库变量完全存储 _variable.scss 文件,现在无论是想适应...css 新特性,还使用 css-in-js 都有巨大成本,导致项目几乎无法迁移。...反过来,如果变量存储 js ,就像草案一样轻巧,你只要换一种方式实现 css 就行了。 总结 众多解决方案,没有绝对优劣。还是要结合自己场景来决定。

    1.9K50

    【前端部署第五篇】使用 docker 部署单页应用,挂载 nginx 配置文件并对其进行系列优化

    「前端部署」系列正在更新: 5/20 ---- 在上篇文章,我们介绍了 Docker 中使用构建缓存与多阶段构建进行缓存优化。 但是部署单页应用时,仍然有一个问题,那就是客户端路由。...在这篇文章,将会由 react-router-dom 实现一个简单单页路由,并通过 Docker 进行部署。...路由 使用 react-dom 为单页应用添加一个路由,由于路由不是本专栏核心内容,省略掉路由用法,最终代码如下。 import logo from './logo.svg'; import '....长期缓存 (Long Term Cache) CRA 应用,./build/static 目录均由 webpack 构建产生,资源路径将会带有 hash 值。 $ tree ....构建资源优化: 使用 terser 压缩 Javascript 资源 使用 cssnano 压缩 CSS 资源 使用 sharp/CDN 压缩 Image 资源或转化为 Webp 使用 webpack

    2K40

    【前端部署第七篇】将静态资源上传至 OSSCDN 并优化上传速度

    如构建后资源全部上传到对象存储,然而「有些资源内容并未发生变更」,将会导致过多上传时间。 冗余资源。「前端每改一行代码,便会生成一个新资源,而旧资源将会在 OSS 不断堆积,占用额外体积。」...从而导致更多云服务费用。 1. 静态资源上传优化 在前端构建过程存在无处不在缓存 当源文件内容未发生更改时,将不会对 Module 重新使用 Loader 等进行重新编译。...// 判断文件 (Object)是否 OSS 存在 // 对于带有 hash 文件而言,如果存在该文件名,则在 OSS 存在 // 对于不带有 hash 文件而言,可对该 Object 设置一个.../build', objectName) // 如果路径名称不带有 hash 值,则直接判断 OSS 不存在该文件名,需要重新上传 const exist = withHash ?...删除 OSS 冗余资源 在生产环境,OSS 只需保留最后一次线上环境所依赖资源。(多版本共存情况下除外) 此时可根据 OSS 中所有资源与最后一次构建生成资源一一对比文件名,进行删除。

    3.2K40

    换了新公司,Vue开发如何无缝快速切换React技术栈

    本文关于React性能优化,主要是三内容, 「提高diff算法dom重复利用率」 「减少资源加载」 「减少组件render次数和计算量(最重点)」 遍历列表使用key 这个跟React...不要使用CSS内联样式 React处理样式有三种 css Module css in js(以styled-components为代表) 内联css (把样式写在组件style里) 对于css...说明Child这个组件我们父组件state变化之后,每次都会重新render。我们可以使用React.memo来避免子组件重复render。...React.useCallback 函数导致子组件重新渲染原理跟上面的内联对象一样,也是因为父组件重新渲染,导致函数方法内存地址发生变化,所以React.memo认为props有变化,导致子组件重复渲染...我们可以使用React.useCallback来缓存函数方法,避免子组件重复渲染。

    1.4K11

    React16错误处理

    导致它在下一步渲染触发神秘错误 。...您还可以将单个小组件封装在错误边界,以保护它们不致破坏应用程序其余部分。 针对未捕获错误新行为 这一变化具有重要意义。...例如,像Messenger这样产品,留下破损UI可能导致某人向错误的人发送消息。同样,对于一个支付应用程序显示错误金额比什么都不渲染要坏。...我们也鼓励您使用JS错误上报服务(或建立您自己),您可以了解他们在生产中发生未处理异常,并修复。...如果你不使用Create React App,你可以添加这个插件手动修改你Babel配置。请注意,它只是为了开发过程中使用在生产环境一定要禁止。 为什么不用 try / catch?

    2.5K20

    【前端部署第四篇】使用 Docker 构建缓存及多阶段构建优化单页应用

    终于可以来一个与真实项目接近带有复杂度项目,以 CRA 部署为例: 「部署一个 Creact React APP2 单页应用。」...「CRA 是 /build 目录」。 以下,便是 cra 获得静态资源命令。...由于需要构建,需要 node 运行环境,因此选择 node。 将以上几个脚本命令放在 RUN 指令。 启动服务命令放在 CMD 指令。...构建时间优化: 构建缓存 我们注意到,一个前端项目的耗时时间主要集中两个命令: npm install (yarn) npm run build 本地环境,如果没有新 npm package 需要下载...「那 Docker 是不也可以做到这一点?」 Dockerfile ,对于 ADD 指令来讲,如果「添加文件内容 checksum 没有发生变化,则可以利用构建缓存」。

    1.6K20

    【译】在生产环境中使用原生JavaScript模块

    但是那时候,尽管能够在生产中部署现代JavaScript,大多数浏览器也都支持模块,我仍然建议打包你代码。 为什么?主要是因为我觉得浏览器中加载模块很慢。...该文件末尾,你会看到这样导出语句(注意,它只包含添加到模块导出语句,而不是所有lodash模块): export {cloneDeep, debounce, find}; 希望这个例子能清楚地说明使用...这意味着不可能使用相同名称来填充原生 import(),因为这样做导致语法错误。...为了说明这个策略不仅适用于简单用例,我还包含了当今复杂JavaScript应用程序需要许多特性: Babel转换(包括JSX) CommonJS依赖关系(例如reactreact-dom) CSS...,并在生产环境中部署原生模块(带有代码拆分和动态导入)。

    1.3K20
    领券