create-react-app 开发环境编译太慢的解决方案

article/2025/10/31 15:38:51

项目环境:windows 10 1089版本 create-react-app:3.0.0 react:16.8.6 react-router-dom:5.0.0

方案一

使用 babel-plugin-dynamic-import-node

原理:转换 import()为 require(),将所有异步组件都用同步的方式引入
页面路由配置文件:使用react-router推荐的loadable加载文件,不做任何修改

使用步骤

  1. 安装包
npm install babel-plugin-dynamic-import-node --save-dev

or

yarn add babel-plugin-dynamic-import-node --dev
  1. 配置环境变量

项目根目录下建 .env.development文件和.env.production文件

.env.development 文件

NODE_ENV=development
PUBLIC_URL=/
port=8343

.env.production文件 文件

NODE_ENV=production
PUBLIC_URL=/
port=8343
  1. 配置 .babelrc (package.json配置:把下面env字段对象放到"babel"字段配置项里就好)

{"presets": ["react-app"],// 开发环境下配置项"env": {"development": {"plugins": ["dynamic-import-node"]}},"plugins": [["@babel/plugin-proposal-decorators",{"legacy": true}],["import",{"libraryName": "antd","libraryDirectory": "es","style": "css"}]]
}
  1. 启动项目 yarn start 完成后改变项目代码运行编译时间对比
    配置前
    在这里插入图片描述
    配置后
    在这里插入图片描述

通过两张图对比我们发现启动时间从27.269秒减少到11.462秒,快了一半多。
修改文件编译时间从16.931秒减少到0.702秒,快了20多倍。

方案二

手动修改加载路由组件的导入方法
1.项目文件目录
在这里插入图片描述

2.核心修改
src/router/loader.js 文件

import Loadable from "react-loadable";
import Loading from "@/components/Loading";// 项目中所有页面在views文件下const devLoader = file => require("@/views/" + file ).default;const loader = viewPath =>Loadable({loader: () => import(`@/views/${viewPath}`),loading: Loading});const _import = process.env.NODE_ENV === "production" ? loader : devLoader;export default _import;

3.在路由配置文件中
src/router/modules/appSetting.js 文件中导入loader文件

import React from "react";
import loader from "../loader";// 酒店信息设置
const SettingHotel = loader(`setting/baseSetting`);
// 协议设置
const SettingProtocol = loader(`setting/protocol`);const routers = [{path: "/setting",title: "设置",icon: "setting",redirect: "/setting/base",forbiddenLink: true,subRouters: [{path: "/setting/base",component: () => <SettingHotel />,title: "基础设置"},{path: "/setting/protocol",component: () => <SettingProtocol />,title: "协议"}]}
];export default routers;

4.修改完成后启动项目,并修改项目代码
修改前
在这里插入图片描述
修改后
在这里插入图片描述
通过两张图对比我们发现启动时间从27.269秒减少到14.312秒,快了近一半。
修改文件编译时间从16.931秒减少到3.696秒,快了五倍左右。

其他方案

采用react-hot-loader热加载局部更新

实际体验对开发编译速度提升不大,此处略。

总结

推荐使用第一种方案,除了速度快,副作用也比较少。

第二种方案src/views/下的 .jsx或.js 文件都会被打包。不管你是否被依赖。所以这样就产生了一个副作用,就是会多打包一些可能永远都用不到 js 代码。当然这只会增加 dist或build文件夹的大小,但不会对线上代码产生任何的副作用。

第一种方案解决了第二种方案重复打包的问题,同时对代码的侵入性也很小,平时写路由的时候只需要按照官方文档路由懒加载的方式就可以了,其它的都交给babel来处理。


http://chatgpt.dhexx.cn/article/mvOjKurF.shtml

相关文章

Android音乐App开发准备( 简易音乐 一 )

Android音乐App开发准备&#xff08; 简易音乐 一 &#xff09; 关于第一步&#xff0c;获取音乐来源第二步&#xff0c;开发环境第三步&#xff0c;引用三方第四步&#xff0c;添加唯一进程App.java 关于 年前学习网易云因为app&#xff0c;想着学习网易云app的界面以及功能开…

uniapp开发环境搭建

一、下载并安装开发工具 uniapp的开发工具为HbuilderX&#xff0c;下载地址为&#xff1a;去下载 这里选择windows版本。windows 版本下载完成之后会得到一个 zip 的压缩包文件&#xff0c;解压完成即可使用&#xff0c;是不需要安装的绿色版本。 二、安装sass和scss插件 打开…

uni-app开发环境搭建创建uni-app项目

uni-app修炼之路&#xff08;一&#xff09; 导语uni-app开发环境搭建1.进入官网下载HBuilder-X2.打开HBuilder-X&#xff0c;进行开发环境配置 创建uni-app项目快速上手 导语 uni-app使用了快半个月了&#xff0c;现在准备来系统的学习一下uni-app&#xff0c;并做一些笔记&a…

搭建iOS开发环境

1.准备 当前移动开发主要分为安卓开发和iOS开发&#xff0c;安卓是谷歌在2007年宣布开源的移动操作系统&#xff0c;iOS是苹果2007年发布的。两个系统出现的时间大致相同&#xff0c;在随后的十年间引领了移动开发浪潮。如今各种移动开发技术层出不穷&#xff0c;一些跨平台的…

HBuilderX App开发环境搭建

1. Nox 模拟器 1). 无脑式安装 Nox模拟器平板界面.png 2). 屏幕修改 点击右侧上方的设置按钮&#xff0c;在系统设置中选择手机版&#xff0c;点击保存并重启。 Nox设置界面.png 3). 端口设置 Nox模拟器默认端口&#xff1a;62001 2. HBuilderX 1). 点击右侧的Download&#…

模型部署,移动端安卓App开发环境搭建和配置教程 ~

点击上方“码农的后花园”&#xff0c;选择“星标” 公众号 精选文章&#xff0c;第一时间送达 在深度学习中&#xff0c;算法模型部署到移动端中应用是最终的目的&#xff0c;上期中讲解了App开发目前主要有以下三种方式&#xff1a; 第一种&#xff1a;Eclipse JDK Android…

安卓开发环境搭建

1.下载JDK 7&#xff08;1.7&#xff09;或者8 &#xff08;1.8&#xff09;SE 现在一般是8 安装 然后配置环境变量后 执行命令 javac 看看是否成功&#xff0c;java -version可以查看版本 oracle登录账号可用 oracle.com passwords - BugMeNothttp://bugmenot.com/vie…

Android app 开发环境搭建

Android app 开发环境搭建(AMD和intel环境下) 下载Anaroid studio 安装 选择你想要安装的Android Studio的功能。检查想要安装的组件&#xff0c;取消检查不想安装的组件。单击Next继续。 空间要求:2.3gb 配置 收集数据用于服务X 不安装SDK(自行下载) 个性化 选择…

Android APP完整基础教程(01)开发环境简介

该系列文章主要基于AndroidQ平台&#xff0c;主要介绍Android应用基础开发相关知识。主要针对安卓应用开发路径的完整解读 和 coding练习内容的解读。 1 Android 发展历史 1.1 Android 历史 2005年 Google收购了成立仅22个月的高科技企业Android公司。2007年 Google正式向外…

移动APP开发环境搭建(新手)

移动APP开发环境配置(新手搭建) 涉及到的配置工具 STS ( eclipse idea 一样的开发工具)java jdk : 是Java语言开发工具包&#xff0c;JDK是整个JAVA的核心&#xff0c;包括了Java运行环境ant &#xff1a;Ant是Java的生成工具&#xff0c;用来编译、生成&#xff1b;跨平台&…

JSON.

JSON JSON 指的是 JavaScript 对象表示法&#xff08;JavaScript Object Notation&#xff09;&#xff0c;是轻量级的文本数据交换格式 &#xff0c;使用 Javascript语法来描述数据对象&#xff0c;具有自我描述性&#xff0c;更易理解&#xff0c;但是 JSON 仍然独立于语言和…

JSONP 接口

1. 回顾 JSONP 的概念与特点 概念&#xff1a;浏览器端通过 <script> 标签的 src 属性&#xff0c;请求服务器上的数据&#xff0c;同时&#xff0c;服务器返回一个函数的调用。这种请求数据的方式叫做 JSONP。 特点&#xff1a; ① JSONP 不属于真正的 Ajax 请求&a…

Json接口代码生成工具-Json2Code

将接口的json文件转化为代码的工具&#xff0c;支持如下语言&#xff1a;C#,C,Dart,Go,Java,JavaScript,Kotlin,Objective-C,Python,Ruby,Rust,Swift,TypeScript Json2Code主要是为了解决前端在拿到后端swagger、postman等工具导出的接口描述文件的时候&#xff0c;大部分工作都…

Json 格式的接口测试该怎么做?

后端开发过程中&#xff0c;开发完毕后要进行必要的接口测试&#xff0c;很多人会疑惑 Json 格式的接口测试到底应该怎么做&#xff0c;为了让大家有个粗略的认识&#xff0c;这里我们运用 Eolink 接口工具来给大家演示一下 API 导入、对 API 进行测试以及更高级的 Mock 测试。…

http+json 格式的接口开发实践与思考

业务背景 最近一段时间&#xff0c;都在做接口对接&#xff0c;项目也差不多上线了&#xff0c;正好也总结下自己的想法和思考。 项目的主要目的是给我公司店铺的店长、员工、和业务品牌领导提供一个入口&#xff0c;可以很方便直观地看到店铺之间&#xff0c;员工之间的一些…

基于json文件创建后端模拟接口

json-server有很多接口&#xff1b;目的&#xff1a;基于一个json文件就可以创建很多的后端模拟接口&#xff1b; &#xff08;1&#xff09;先创建一个json文件&#xff1a; &#xff08;2&#xff09;然后下载nodejs&#xff1a;下载 | Node.js 中文网 注意&#xff1a;下…

SpringBoot接口接收json参数

1. 创建入参实体&#xff1a; package com.hsm.ls.application.test.domain;/*** Created by lfx on 2018/12/19.*/ public class ActiveRequest {private String sid;private String biz;private String text;public String getSid() {return sid;}public void setSid(String…

JSONP接口

概念&#xff1a;浏览器通过<script>标签的src属性&#xff0c;请求服务器上的数据&#xff0c;同时服务器返回一个函数的调用。这种请求数据的方式叫JSONP 特点&#xff1a;JSONP不属于真正的的Ajax请求&#xff0c;因为它没有使用XMLHttpRequest这个对象 JSONP仅支持G…

java 调用接口为json格式

#simple 直接上代码 ①pom文件导入hutool的war包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.10</version></dependency>②new JSONObject(); 对象&#xff0c; put你所需要的…

『前端必备』本地数据接口—json-server

文章目录 json-server介绍简介操作步骤 操作数据增&#xff08;POST&#xff09;删&#xff08;DELETE&#xff09;改&#xff08;UPDATE、PATCH&#xff09;查&#xff08;GET&#xff09;筛选分页排序切片(分页)特殊符号添加_gte或_lte获取范围添加_ne以排除值添加_like到过滤…