react create-react-app v5 从零搭建项目

news2024/12/22 20:54:22

前言:

好久没用 create-react-app做项目了,这次为了个h5项目,就几个页面,决定自己搭建一个(ps:mmp 好久没用,搭建的时候遇到一堆问题)。

我之前都是使用 umi 。后台管理系统的项目 使用 antd-pro框架。实际上antd-pro 是基于umi搭建集成的框架。里面封装好了各种东西,开箱即用。

我的环境如下:
create-react-app v5

    "axios": "^1.5.0",
    "http-proxy-middleware": "^2.0.6",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router": "^6.16.0",
    "react-router-dom": "^6.16.0",
    "customize-cra": "^1.0.0",
    "react-app-rewired": "^2.2.1"

v5版本 好多问题,有很多 问题,有些插件 里的办法也不适配了(坑很多,很多 time:2023-09-27)。
我说的坑多,是我不想暴露 webpack配置的情况下 使用 react-app-rewired 和 customize-cra 这个来配置一些东西遇到的。本身并不是 create-reacr-app的问题。

所以你如果不想这么麻烦,那你可以直接 npm run eject然后用传统的webpack配置。

搭建过程:

一、创建项目:
安装Node 和 npm: Node >= 14.0.0 和 npm >= 5.6

npx install -g create-react-app

npx create-react-app my-app

在这里插入图片描述
npx 不是拼写错误 —— 它是 npm 5.2+ 附带的 package 运行工具。

react 官网文档

二、配置各种必备的东西

npm start 运行 看到下图就说明项目创建成功了!
项目运行成功效果图

配置路由:

1.下载 react-router-dom

npm install react-router-dom

1.首先 npm react-router-dom
2.App.js 里 写上如下代码:

import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import routes from './routes';
const App = () => {
  console.log(routes)
  return (
    <BrowserRouter>
      <Routes>
        {routes.map((route) => (
          <Route key={route.path} path={route.path} element={route.component} />
        ))}
        {/* <Route path="*" element={<Home />} />  */}
      </Routes>
    </BrowserRouter>
  );
};

export default App;

App.js 代码截图
3.index.js里写上:

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
   </React.StrictMode> 
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

index.js代码截图

4.在src下新建一个 routes.js文件 写上:

// 导入你的页面组件  
import Home from './pages'; 
const routes = [
  { path: "/", component: <Home/>}
];

export default routes;

routes.js代码截图
运行看到 Home组件里的东西就说明成功了。之后可以在 scr/router.js里导入其他组件 写上 path和routers就行了。

注意:react-router-dom v6 和v5 api不太一样,比如 v5 把 Route 上是 component v6是element。具体写法 建议参考 你所用的版本 文档!

如果遇到了Uncaught TypeError: Cannot read properties of null (reading ‘useRef‘) 报错,可以看https://blog.csdn.net/weixin_44058725/article/details/133316898

配置less:

可以参考:
react create-react-app 配置less

配置Proxy代理:

使用 http-proxy-middleware
1.安装http-proxy-middleware

npm install http-proxy-middleware --save

2.根目录新建一个setupProxy.js
代码大致如下:
然后 请求接口时以/api/xx就会自动走代理。

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
    app.use(
      '/api',
      createProxyMiddleware({
        target: 'http://localhost:8000',
        changeOrigin: true,
        // pathRewrite: {  
        //     '^/api': '/',  
        //   },  
      })
    );
  };

配置axios:

1.安装 axios

cnpm install axios --save

2.src/utils 新建一个 request.js文件(没有utils就新建一个目录然后再建一个request.js)
3.request代码如下:
这个是最简单的配置了,你可以根据自己的需求配置 请求拦截里的东西。

import axios from 'axios'
import {BASE_URL,TIMEOUT}  from '../../config';
var request = axios.create({
    baseURL:BASE_URL,//基准地址
    timeout:TIMEOUT
})
//拦截请求
request.interceptors.request.use((config)=>{
    return config
})
//拦截响应
request.interceptors.response.use((response)=>{
    return response
},function (error){
    //对响应的错误做点什么
    return Promise.reject(error);
}
)
 
export default request;

不暴露 eject 配置自己的webpack:

  1. 下载react-app-rewired 和 customize-cra-5
npm install react-app-rewired customize-cra-5 --save-dev

2.在项目根目录创建一个config-overrides.js 文件

比如配置 less 建议具体参考 上面的配置 less:

const { override, addLessLoader, addPostcssPlugins } = require("customize-cra-5");

module.exports = override(
  addLessLoader({  
    lessOptions:{
      javascriptEnabled: true,  
      modifyVars: { '@primary-color': '#1DA57A' }, // 你的主题色  
    },
  }) 
);

比如:按需加载 antd

注意:antd-mobile无需配置手动按需加载
antd-mobile 按需加载
antd-mobile 按需加载官网截图

需要 cnpm install babel-plugin-import
后再配置

const {
  override,
  addLessLoader,
  addPostcssPlugins,
  fixBabelImports,
} = require("customize-cra-5");

module.exports = override(
  // addPostcssPlugins([require("autoprefixer")]), //自动给样式加浏览器前缀 不过 cra自带了所以可以不用这个
  // addLessLoader({
  //   lessOptions:{
  //     javascriptEnabled: true,
  //     modifyVars: { '@primary-color': '#1DA57A' }, // 你的主题色
  //   },

  // })

  // 针对antd-mobile 实现按需打包:根据import来打包 (使用babel-plugin-import)
    fixBabelImports("import", {
    libraryName: "antd",
    libraryDirectory: "es",
    style: true, //自动打包相关的样式 默认为 style:'css'
  }),
);

比如 引入 px2rem(虽然官方这么写 但是 我并不起作用):

在这里插入图片描述

  addPostcssPlugins([require("postcss-px2rem")({ remUnit: 37.5 })])

部分内容参考于 React移动端适配解决方案

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你听说过推挽电路吗?避免交越失真

推挽电路就是用两个三级管或者场效应管构成的放大电路&#xff0c;这个电路的特点就是输出电阻小&#xff0c;能够驱动大的负载&#xff0c;从而能够使得单片机管脚直接驱动发光二极管、蜂鸣器。上面的三极管是N型三极管&#xff0c;下面的三极管是P型三极管&#xff0c; 当输入…

【深度学习实验】卷积神经网络(五):深度卷积神经网络经典模型——VGG网络(卷积层、池化层、全连接层)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. conv_layer&#xff08;创建卷积块&#xff09; 2. vgg_conv_block&#xff08;卷积模块&#xff1a;卷积层*n、池化层&#xff09; 3. vgg_fc_layer&#xff08;…

华为云云耀云服务器L实例评测|华为云云耀云服务器docker部署srs,可使用HLS协议

华为云云耀云服务器L实例评测&#xff5c;华为云云耀云服务器docker部署srs&#xff0c;可使用HLS协议 什么是华为云云耀云L实例 云耀云服务器L实例&#xff0c;面向初创企业和开发者打造的全新轻量应用云服务器。提供丰富严选的应用镜像&#xff0c;实现应用一键部署&#x…

信创办公–基于WPS的EXCEL最佳实践系列 (获取外部数据)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;获取外部数据&#xff09; 目录 应用背景操作步骤1、导入数据2、刷新数据 应用背景 通常企业的数据会存储在数据库或不同的系统中&#xff0c;而我们想要在自己用的工作WPS的excel表格里使用这些数据&#xff0c;我们可以使…

QT入门10个小demo——MP4视频播放器

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 一、前…

美摄AIGC创新引擎,助力企业快速搭建AIGC能力(一)

AIGC作为当下最热的重要赛道&#xff0c;迅速在视频、图像、文案、绘画等生产创作领域出圈&#xff0c;吸引了百度、阿里、腾讯、谷歌等众多互联网大厂&#xff0c;纷纷布局和计划推出AIGC类的产品。 全新的视频内容生产方式&#xff0c;AIGC利用人工智能技术实现视频内容的自…

DEV gridview多表头设计

先上图&#xff1a; 第一步转化gridview变成bandedGridview类型 一步步按照自己想要的格式添加&#xff0c;先把表头格式全部弄好&#xff0c;然后在拖拉对应的列。 注意&#xff1a;全部弄完后把列表头设置不可见

踩坑 | vue项目运行后使用require()图片也不显示

文章目录 踩坑 | vue项目运行后使用require()图片也不显示问题描述解决办法1&#xff1a;src属性直接传入地址解决办法2 踩坑 | vue项目运行后使用require()图片也不显示 问题描述 在网上查阅之后&#xff0c;发现结论是在使用vue动态加载图片时&#xff0c;必须使用require。…

一篇爆款产品软文怎么写?媒介盒子告诉你三步

随着数字技术的加速发展&#xff0c;企业推广产品的方式已经逐渐从线下过度到线上&#xff0c;而线上推广中比较常见的方式就是软文推广&#xff0c;软文推广成本较低&#xff0c;用户接受度也更高&#xff0c;但是一篇爆款产品软文应该怎么写呢&#xff1f;下面就让媒介盒子告…

nvm安装后node或npm不是内部或外部命令

nvm安装后出现node或npm不是内部或外部命令 进行以下步骤解决 找到nvm安装所在位置&#xff0c;新建一个空的nodejs文件夹 打开 windowr —> sysdm.cpl —> 高级 —>环境变量 将下图中两个位置的地址改成刚刚新建的nodejs空文件夹所在的位置 nvm安装后都是会自动添加…

Qwen-VL:多功能视觉语言模型,能理解、能定位、能阅读等

Overview 总览摘要1 引言2 方法2.1 模型结构2.2 输入输出 3 训练3.1 预训练3.2 多任务预训练3.3 监督finetune 4 评测4.1 图像文本描述和视觉问答4.2 面向文本的视觉问答4.3 指代表达理解4.4 视觉语言任务中的小样本学习4.4 现实用户行为下的指令遵循 5 相关工作6 总结与展望附…

如何运用yolov5训练自己的数据(手把手教你学yolo)

在这篇博文中&#xff0c;我们对YOLOv5模型进行微调&#xff0c;用于自定义目标检测的训练和推理。 目录 引言&#xff1a; YOLOv5是什么&#xff1f; YOLOv5提供的模型 YOLOv5提供的功能 使用YOLOv5进行自定义目标检测训练 自定义训练的方法 自定义训练代码 准备数据集 …

logback日志框架学习(2)logback的构造

官网 https://logback.qos.ch/manual/architecture.html Logback构造 Logback’s basic architecture is sufficiently generic so as to apply under different circumstances. At the present time, logback is divided into three modules, logback-core, logback-classic…

vue3 +elementplus | vue2+elementui 动态地通过验证规则子新增或删除单个表单字段

效果图 点击 ‘’ 新增一行&#xff0c;点击‘-’ 删除一行 vue3elementplus写法 template <el-dialog v-model"dialogFormVisible" :title"title"><el-form ref"ruleFormRef" :model"form" :inline"true" lab…

强势得分套路之一:单基因泛癌+实验验证

今天给同学们分享一篇单基因泛癌实验验证的生信文章“A human pan-cancer system analysis of heat shock protein family A member 5”&#xff0c;这篇文章于2023年5月15日发表在Am J Cancer Res期刊上&#xff0c;影响因子为5.2。 热休克蛋白家族A成员5&#xff08;HSPA5&am…

2024年湖北中级工程师职称申报需要准备什么资料呢?

湖北中级职称申报每个地方需要的资料和要求都不一样&#xff0c;但是大部分申报材料、条件和要求基本是一致的&#xff0c;有的只是细微差别。那么湖北中级工程师职称申报需要准备什么资料呢&#xff1f;今天甘建二先告诉你&#xff0c;职称资料需要提早准备哟&#xff0c;有的…

command not found

一 问题 连着几次登录&#xff0c;输入ls&#xff0c;都not found 二 解决方案 1. 临时生效&#xff0c;下次登录还是not found export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 2. 永久生效&#xff0c;将上面的配置&#xff0c;添加…

iTunes怎么用?iTunes如何恢复备份?(果粉必备教程)

iTunes是由苹果公司推出的一款免费数字媒体播放应用软件。通过使用iTunes软件&#xff0c;用户可以在软件上管理和播放数字音乐、视频、电影&#xff0c;以及电视节目等等。此外&#xff0c;iTunes还是管理数据的好帮手&#xff0c;用户可以通过iTunes备份管理自己手机上的数据…

“TaiChiHealthPreservation“ app Tech Support(URL)

If you have any questions, you can either leave a message or send the questions to our email address. We will answer them for you in the first time. Address: drrjownbnhotmail.com thank you.

机器人过程自动化(RPA)入门 4. 数据处理

到目前为止,我们已经了解了RPA的基本知识,以及如何使用流程图或序列来组织工作流中的步骤。我们现在了解了UiPath组件,并对UiPath Studio有了全面的了解。我们用几个简单的例子制作了我们的第一个机器人。在我们继续之前,我们应该了解UiPath中的变量和数据操作。它与其他编…