[react]脚手架create-react-app/vite与reac项目

[react]脚手架create-react-app/vite与reac项目

  • 环境
  • 问题描述
  • create-react-app 脚手架
    • 根据脚手架修改项目结构
      • 安装脚手架
      • 注入配置文件-config文件夹
      • package.json文件变更
      • 删除 serviceWorker.js
      • 新增reportWebVitals.js文件
      • 更新index.js文件
    • 脚手架creat-react-app 缺点
  • vite 脚手架
    • 初始化脚手架 & 项目
    • 初始化项目包
    • 迁移

本人是在react项目升级的过程迁移的脚手架,原项目使用的creat-react-app,脚手架升级变更对项目的基本结构修复后,项目已经可以正式启动了,记录一下

环境

  • node -v.18.15.0
  • react - 16.9.0

问题描述

随着本地node版本的提升,运行以前的项目遇到了以下问题:

Error: error:0308010C:digital envelope routines::unsupported

网上描述都是因为 node 版本升级导致的,运行的项目比较早会报错,而网上提供的方案大多都是降低 node 版本,实际上我觉的应该是从其它方面修复而不是降低版本???!!!因为我们以后开发的版本都是越来越高的,不可能每次遇到早期的版本都降级node!!!

然后运行命令查看最新的包的情况:

npm outdated

同时发现react也是老版本, react最新版本已经升级到 18.2.0 版本,但是使用的却还是16.9.0 ,那么既然都是升级,也可以顺便升级一下 react 的代码

考虑到react都升级了,当初创建项目的脚手架应该也升级了,所以项目的基本结构可能发生变化,因此先升级脚手架看一下结构是否变化

create-react-app 脚手架

根据脚手架修改项目结构

考虑到基础框架的内容可能也存在变更,并且之前使用的create-react-app脚手架,那么先升级了全局的create-react-app脚手架

安装脚手架

npm i create-react-app -g
create-react-app -V 

发现输出版本是5.0.1是最新版本

然后使用脚手架创建新的项目

create-react-app <react-project-name>

此时比对项目的基本结构,因为demo只是最基础的东西,所以需要查看的仅仅包括 package.json 的变化,一些基础文件的变化,基本不包括业务相关代码

在这里插入图片描述

注入配置文件-config文件夹

npm run eject

考虑到之前config文件夹就是自动注入的,并且没有其它额外的配置,所以将项目中老版本的config文件夹也删除,如果之后需要的话,再生成,也就是可以暂时忽略配置文件,因为没有使用到配置文件的修改

package.json文件变更

根据 package.json 的比对发现运行的脚本发生了变化

首先将运行的脚本:

  "scripts": {
    "start": "node scripts/start.js",
    "build": "node scripts/build.js",
    "test": "node scripts/test.js",
  }

替换为:

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

并且根目录下的 scripts 文件夹可以删除了,新版本已经不使用该文件夹了

其次,依赖的变化,以下是新版本demo中的几个依赖,可以此时更新或添加也可以等之后用到的时候再添加,本人采用直接先更新这几个依赖包:

"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"

运行以下命令:

npm i react@18.2.0 react-dom@18.2.0 -D
npm i web-vitals@2.1.4 react-scripts@2.1.4 -D

其它package.json的变化先不考虑了

删除 serviceWorker.js

该文件也是之前脚手架自动生成的一个文件,新脚手架生成的文件中已经没有该文件了,所以删除该文件src/serviceWorker.js,并删除index.js文件对该文件的引用,即以下代码

import * as serviceWorker from './serviceWorker';
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

新增reportWebVitals.js文件

对比发现新增了一个src/reportWebVitals.js文件

reportWebVitals.js

const reportWebVitals = (onPerfEntry) => {
  if (onPerfEntry && onPerfEntry instanceof Function) {
    import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
      getCLS(onPerfEntry);
      getFID(onPerfEntry);
      getFCP(onPerfEntry);
      getLCP(onPerfEntry);
      getTTFB(onPerfEntry);
    });
  }
};

export default reportWebVitals;

然后,在index.js文件中添加该文件的使用

import reportWebVitals from "./reportWebVitals";
reportWebVitals();

感觉就是reportWebVitals文件替换了之前的serviceWorker文件

更新index.js文件

import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
//变更为
import { createRoot } from "react-dom/client";
import App from "./App";

const root = createRoot(document.getElementById("root"));
root.render(<App />);

然后可以启动一下项目,根据错误提示进一步修改项目

脚手架creat-react-app 缺点

发现该脚手架并不是非常好用,路由、样式需要自己单独初始化与使用

不可定制使用css的解析器

eject时候注入内容是强制全部添加的

修改某些路由文件的时候都不能实现热部署,需要手动启动这个就比较麻烦了

因此打算找一些其它的脚手架,如果好用就弃用creat-react-app

vite 脚手架

但是开始修复升级的 react-router,redux等其它依赖包时,总是需要手动重启项目就比较麻烦,想到框架变更并不影响业务代码,只是变更的打包等功能,以及框架的文件,因此直接将脚手架换成vite,在之后的调试过程中不用在手动启动项目,比较方便调试包的升级

初始化脚手架 & 项目

npm create vite
等价于
npm i create-vite -g
create-vite <project-name>

初始化项目包

npm i

此时项目已经可以运行,直接将业务代码迁移即可

迁移

  • index.js对应于vite中的main.jsx;基本不用改动;
  • app.js对应于vite中的 app.jsx;直接复制到app.jsx即可;
  • src文件夹中的内容,排除App.test.js, reportWebVitals.js等原脚手架生成的文件,其它业务代码直接复制即可
  • 运行项目,将缺少的包安装即可,最好不要直接复制package.json文件,因为除了脚手架的依赖包,有些配置也不相同了

发现现在react的依赖包也开始区分开发环境与非开发环境了,所以安装依赖包的时候:

# 线上需要的包
npm i <pk> 
# 开发环境需要的包
npm i <pk> -D

此时项目可以直接运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/284228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

msvcp140_1.dll丢失怎样修复,缺失msvcp140_1.dll是什么原因

在日常使用电脑的过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140_1.dll丢失”。那么&#xff0c;msvcp140_1.dll究竟是什么文件&#xff1f;为什么会出现丢失的情况&#xff1f;又该如何解决这个问题呢&#xff1f;本文将详细介绍msvcp140_1…

CSS去掉按钮阴影 | css去掉按钮边框 | 注意改变搜索的关键词、搜索方式

上图是在谷歌浏览器中运行的结果 button {box-shadow: none;height: 50px;width: 100px;background-color: white;border-color: white; }写了以上的css&#xff0c;发现按钮还是有阴影一样的东西&#xff0c;查阅网络资料的时候也一直在搜索“如何去掉按钮阴影”&#xff0c;…

MK米客方德品牌 SD NAND在对讲机领域的引领作用

SD NAND在对讲机上的应用 SD NAND在对讲机上广泛应用&#xff0c;为其提供了高效可靠的存储解决方案。 这种存储技术不仅能容纳大量语音和数据文件&#xff0c;而且具有高速读取的特点&#xff0c;保障了实时通信的质量。SD NAND还注重安全性&#xff0c;通过数据加密和访问控…

cnPuTTY CAC 0.80—PuTTY CAC 0.80中文版本简单说明~~

随着PuTTY 0.80在2023-12-18发布&#xff0c;PuTTY CAC也同步进行了更新。 PuTTY CAC 0.80同步更新了针对Terrapin攻击(CVE-2023-48795)的修改&#xff0c;除了这些还进行了额外的添加和修改。另外来自cnPuTTY CAC自身也进行了小的修改。更多详细的内容请参考以下内容。 首先&…

C++/CLI——2类和对象生存期

C/CLI——2函数与类的使用方法 函数使用 定义函数和使用函数基本与C#相同&#xff0c;只不过C/CLI可以像标准C一样&#xff0c;可以先声明函数原型&#xff0c;再定义函数主体。值得注意的是&#xff0c;如果有默认参数&#xff0c;只能在函数原型中定义&#xff0c;不能在函…

2023,最后

最后一天确实来得飞快&#xff0c;今年也不算什么特殊的一年&#xff0c;所以总结似乎也显得没有特别重要&#xff0c;但是既然它来了&#xff0c;也就要走了&#xff0c;老子也顺道给他做一次结束的话。 ——我和我的技术交流群 启发和启发的朋友们是2023年我特别关注的一群人…

Yapi接口管理平台Centos7容器部署

文章目录 0.Docker部署1.Docker部署1.1 MongoDB1.2 下载 Yapi 镜像1.3 初始化数据库1.4 启动 Yapi 服务1.5 访问 Yapi 2.docker-compose部署2.1 创建容器网络2.2 创建2.3 创建 mongodb-compose2.4 创建 yapi-compose2.5 启动容器2.6 访问 Yapi 0.Docker部署 参考&#xff1a;C…

1.5 FMEA项目规划:5T

文章目录 1.5.1 FMEA目的1.5.2 FMEA时间节点1.5.3 FMEA团队1.5.3.1 设计FMEA团队1.5.3.2 过程FMEA团队1.5.3.3 FMEA团队角色和职责 1.5.4 FMEA任务1.5.5 FMEA工具 为确保及时获得最佳效果并避免FMEA返工&#xff0c;以下五个主题应在设计FMEA和过程FMEA开始时讨论&#xff0c;它…

labuladong日常刷题-差分数组 | LeetCode 1109航班预定统计 | 花式遍历 151反转字符串里的单词

差分数组–前缀和数组的升级 LeetCode 1109 航班预定统计 2024.1.1 题目链接labuladong讲解[链接] class Solution { public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {//构建航班人数数组&#xff0c;数组大小为n,初…

ICCV 2023 风格迁移方向 5 篇论文

1、StyleDiffusion: Controllable Disentangled Style Transfer via Diffusion Models 内容和风格&#xff08;Content and style disentanglement&#xff0c;C-S&#xff09;解耦是风格迁移的一个基本问题和关键挑战。基于显式定义&#xff08;例如Gram矩阵&#xff09;或隐式…

C++每日一练(9):观光缆车

题目描述 有n座两两相邻的山&#xff0c;山顶高度分别为a1&#xff0c;a2&#xff0c;...&#xff0c;an。蜗蜗想要在相邻的山顶间修建缆车&#xff0c;他想要知道相邻山峰之间最大的落差是多少&#xff1f; 输入 第一行一个整数n&#xff08;2<n<1000&#xff09;&#…

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…

05 HAL库驱动蜂鸣器唱出一首小歌

目录 一、蜂鸣器的基本知识 1、有源蜂鸣器 2、无源蜂鸣器 二、PWM的相关知识 1. PWM概念 2. PWM常见参数 3.PWM基本结构 三、蜂鸣器发出音调的原理 四、频率计算 五、实验开始 一、蜂鸣器的基本知识 蜂鸣器是一种能够发出持续而连续的声音的电子设备&#xff0c;它被…

WINDOWS 批量修改图片文件名称(流星程序集之二十)

博主家里有一台电脑&#xff0c;存放家庭全部的照片和视频&#xff0c;从智能手机和3G网络发展开始&#xff0c;家里的照片和视频越来越多&#xff0c;已经达到上万个文件。终于&#xff0c;博主找到一个方法整理和保存这些珍贵的数据资料。 一、按年代目录整理照片和视频 按年…

低成本TB级数据库技术选型之思考两三点

一、背景 前段时间在搞毕业论文的选题&#xff0c;最头疼的就是大量的文献检索和阅读&#xff0c;从研究的角度上我们可以将文献分为四类&#xff1a; 理论文献&#xff1a;为研究提供理论的框架和基础的文献。这些文献可能并不会和所做的研究直接相关&#xff0c;甚至由于理…

「网络编程」其他重要的协议或技术_ DNS协议 | ICMP协议 | NAT技术

「前言」文章内容是DNS协议、ICMP协议、NAT技术的讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、DNS协议1.1 背景1.2 域名简介1.3 域名解析的过程 二、ICMP协议2.1 ICMP简介2.2 ping命令2.3 traceroute命令 三、NAT技术3.1 NAT技术背景3.2 …

elasticsearch系列五:集群的备份与恢复

概述 前几篇咱们讲了es的语法、存储的优化、常规运维等等&#xff0c;今天咱们看下如何备份数据和恢复数据。 在传统的关系型数据库中我们有多种备份方式&#xff0c;常见有热备、冷备、全量定时增量备份、通过开发程序备份等等&#xff0c;其实在es中是一样的。 官方建议采用s…

Python 基础语法01

变量声明 #运算 num 1 num 1 print("num 1",num)num - 1 print("num - 1", num)num * 4 print("num * 4",num)num 3 num % 2 print("num%2",num)num ** 2 print("num ** 2", num)num 9 num // 2 print("num // …

20231228在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单前置摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11的挖掘机的DTS配置单前置摄像头ov13850 2023/12/28 10:42 【碰到一个很神奇的问题】&#xff1a; 昨天晚上前置摄像头怎么也点不亮&#xff01;改了巨多的地方&#xff01;晚上睡觉之前把开发板彻底断电了&#xff01;今天开电脑…

【JavaFX】JDK11 基于Gson、hutool、Jackson持久化存储实体类数据的解决方案 (读取、追加、去重、写入json对象)

文章目录 开发环境效果前言一、Gson是什么?二、使用步骤1.引入依赖2.创建实体类创建 JsonFileService类创建JsonFileService的实现类 JsonFileServiceImpl三、实现效果开发环境 JDK11IDEA 2023.3Gson、hutool、JacksonJavaFX 11效果 前言 使用JDK1
最新文章