reaccionar crear-react-app v5 Construir un proyecto desde cero

Prefacio:

No he usado create-react-app para un proyecto durante mucho tiempo. Esta vez decidí crear uno yo mismo para un proyecto h5 con solo unas pocas páginas (ps: mmp, no lo he usado durante mucho tiempo y Encontré muchos problemas al construirlo).

He usado umi antes. El proyecto del sistema de gestión backend utiliza el marco antd-pro. De hecho, antd-pro es un marco integrado basado en umi. Varias cosas están empaquetadas en el interior, listas para usar nada más sacarlas de la caja.

Mi entorno es el siguiente:
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"

Hay muchos problemas con la versión v5, hay muchos problemas y los métodos de algunos complementos no son adecuados (hay muchos errores, muchas veces: 2023-09-27).
Los problemas que mencioné fueron causados ​​por el uso de reaccionar-app-rewired y personalizar-cra para configurar algunas cosas cuando no quería exponer la configuración del paquete web. No es un problema con create-reacr-app en sí.

Entonces, si no quiere este problema, puede ejecutar npm eject directamente y usar la configuración tradicional del paquete web.
Si no desea reescribir el paquete web con complementos de terceros, puede leer mi artículo: reaccionar crear-reaccionar-aplicación v5 construida desde cero (usando npm run eject)

Proceso de construcción:

1. Cree un proyecto:
Instale Node y npm: Node >= 14.0.0 y npm >= 5.6

npx install -g create-react-app

npx create-react-app my-app

Insertar descripción de la imagen aquí
npx no es un error tipográfico: es el ejecutor de paquetes que viene con npm 5.2+.

reaccionar a la documentación del sitio web oficial

2. Configurar varias cosas necesarias

Ejecute npm start y vea la imagen a continuación, lo que significa que el proyecto se creó correctamente.
Representaciones exitosas de la operación del proyecto.

Configurar el enrutamiento:

1. Descargue reaccionar-router-dom

npm install react-router-dom

1. Primer npm react-router-dom
2. Escriba el siguiente código en 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;

Captura de pantalla del código App.js
3.Escribe en 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();

captura de pantalla del código index.js

4. Cree un nuevo archivo route.js en src y escriba:

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

export default routes;

captura de pantalla del código route.js
Si ejecuta y ve las cosas en el componente Inicio, significa éxito. Después de eso, puede importar otros componentes en scr/router.js y simplemente escribir la ruta y los enrutadores.

Nota: reaccionar-router-dom v6 y v5 api no son lo mismo. Por ejemplo, en v5, la ruta es componente y v6 es elemento. Para conocer métodos de escritura específicos, se recomienda consultar la documentación de la versión que está utilizando.

Si encuentra el error TypeError no detectado: No se pueden leer las propiedades de null (leyendo 'useRef'), puede consultar https://blog.csdn.net/weixin_44058725/article/details/133316898

Configurar menos:

Puede consultar:
reaccionar crear-reaccionar-configuración de la aplicación menos

Configurar el proxy proxy:

Usando http-proxy-middleware
1. Instale http-proxy-middleware

npm install http-proxy-middleware --save

2. Cree un nuevo setupProxy.js en el directorio raíz,
el código es aproximadamente el siguiente:
luego, cuando solicite la interfaz, use /api/xx y el proxy se usará automáticamente.

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

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

Configurar axios:

1. Instalar axios

cnpm install axios --save

2. Cree un nuevo archivo request.js en src/utils (si no hay utils, cree un nuevo directorio y luego cree un request.js)
3. El código de solicitud es el siguiente:
Esta es la configuración más simple. Puede configurar la solicitud de interceptación según sus propias necesidades.

import axios from 'axios'

 // axios的配置文件, 可以在这里去区分开发环境和生产环境等全局一些配置
 const devBaseUrl = 'http://api.k780.com/'
 const proBaseUrl = 'http://xxxxx.com/'
 
 // process.env返回的是一个包含用户的环境信息,它可以去区分是开发环境还是生产环境
 export const BASE_URL =  process.env.NODE_ENV === 'development' ? devBaseUrl : proBaseUrl
 export const TIMEOUT = 5000

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;

Configure su propio paquete web sin exponer eject:

  1. Descargue reaccionar-app-rewired y personalizar-cra-5
npm install react-app-rewired customize-cra-5 --save-dev

2. Cree un archivo config-overrides.js en el directorio raíz del proyecto.

Por ejemplo, al configurar menos, se recomienda consultar la configuración de menos anterior:

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

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

Por ejemplo: cargar antd bajo demanda (carga bajo demanda)

Nota: No es necesario configurar antd-mobile para cargar
antd-mobile manualmente bajo demanda.
antd-mobile carga capturas de pantalla del sitio web oficial a pedido
De hecho, la versión superior de antd también viene con carga bajo demanda y no necesita ser configurada (el siguiente código es solo una demostración Si tiene otras bibliotecas de interfaz de usuario o complementos, debe cargarlos a pedido. Puede seguir los pasos a continuación): el
Insertar descripción de la imagen aquí
enlace oficial de antd se carga a pedido


Es necesario configurar después de instalar cnpm 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'
  }),
);

Por ejemplo: el alias de ruta src se escribe como @/xxx

  const {
    
    
  override,
  addLessLoader,
  addPostcssPlugins,
  fixBabelImports,
  addWebpackAlias
} = require("customize-cra-5");
const path = require('path')
  addWebpackAlias({
    
    
    '@': path.resolve('src')
  }),

Luego puedes usar @ para introducir archivos en src.

Por ejemplo, presentando px2rem (aunque está escrito oficialmente de esta manera, no me funciona):

En este momento, no he encontrado ninguna solución a los problemas (2023-09-28, tal vez la haya en el futuro, porque mi proyecto es urgente, debo usar la operación rem de conversión de px para adaptarme al móvil h5)
Insertar descripción de la imagen aquí

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

Parte del contenido se refiere a la API de la solución de adaptación de terminal móvil React
personalizar-cra-5, puedes consultar la documentación en github.
Captura de pantalla de la parte API

personalizar-cra api doc

Supongo que te gusta

Origin blog.csdn.net/weixin_44058725/article/details/133314417
Recomendado
Clasificación