Vite搭建React项目的方法步骤

 更新时间:2021年04月07日 08:41:01   作者:Cookieboty  
这篇文章主要介绍了Vite搭建React项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

日常放鸽,火钳刘明

这是一个基于 vite 搭建的 React 的项目,开发体验非常棒。

创建一个 Vite 项目

yarn create @vitejs/app

如上图,选择了 react-ts 预设模板,如果出现下图一样的工程

yarn   // 安装依赖
yarn dev  // 启动开发环境

打开浏览器输入http://localhost:3000/#/,如上图所示的话。那么恭喜你,你可以正常开发 React 项目了。完结撒花

如果不行的话,直接看 vite 官网,它比我写的详细

改造工程

但上述只是一个基础的 React demo,在实际开发项目中,是远远不够的,需要额外做一些项目配置

目录约定

根据日常的开发习惯,先进行基本的目录约定

├── dist/       // 默认的 build 输出目录
└── src/       // 源码目录
 ├── assets/     // 静态资源目录
 ├── config      
  ├── config.js    // 项目内部业务相关基础配置
 ├── components/    // 公共组件目录
 ├── service/     // 业务请求管理
 ├── store/      // 共享 store 管理目录
 ├── until/      // 工具函数目录
 ├── pages/      // 页面目录
 ├── router/     // 路由配置目录
├── .main.tsx      // Vite 依赖主入口
├── .env       // 环境变量配置
├── vite.config.ts     // vite 配置选型,具体可以查看官网 api
└── package.json

配置路由

改造 main.tsx

import React from 'react'
import ReactDOM from 'react-dom'
import { HashRouter, Route, Switch } from 'react-router-dom'
import routerConfig from './router/index'
import './base.less'

ReactDOM.render(
 <React.StrictMode>
 <HashRouter>
  <Switch>
  {
   routerConfig.routes.map((route) => {
   return (
    <Route key={route.path} {...route} />
   )
   })
  }
  </Switch>
 </HashRouter>
 </React.StrictMode>,
 document.getElementById('root')
)

router/index.ts 文件配置

import BlogsList from '@/pages/blogs/index'
import BlogsDetail from '@/pages/blogs/detail'

export default {
 routes: [
 { exact: true, path: '/', component: BlogsList },
 { exact: true, path: '/blogs/detail/:article_id', component: BlogsDetail },
 ],
}

可以参考上述的配置,把其他的属性也配置进去,比如重定向(redirect)、懒加载等常见路由配置项

另外个人比较倾向通过配置来生成路由,约定式路由总感觉不太方便。

service 管理

所有项目请求都放入 service,建议每个模块都有对应的文件管理,如下所示

import * as information from './information'
import * as base from './base'

export {
 information,
 base
}

这样可以方便请求管理

base.ts 作为业务请求类,可以在这里处理一些业务特殊处理

import { request } from '../until/request'

const prefix = '/api'

export const getAllInfoGzip = () => {
 return request({
 url: `${prefix}/apis/random`,
 method: 'GET'
 })
}

until/request 作为统一引入的请求方法,可以自定义替换成 fetch、axios 等请求库,同时可以在此方法内封装通用拦截逻辑。

import qs from 'qs'
import axios from "axios";

interface IRequest {
 url: string
 params?: SVGForeignObjectElement
 query?: object
 header?: object
 method?: "POST" | "OPTIONS" | "GET" | "HEAD" | "PUT" | "DELETE" | undefined
}

interface IResponse {
 count: number
 errorMsg: string
 classify: string
 data: any
 detail?: any
 img?: object
}

export const request = ({ url, params, query, header, method = 'POST' }: IRequest): Promise<IResponse> => {
 return new Promise((resolve, reject) => {
  axios(query ? `${url}/?${qs.stringify(query)}` : url, {
   data: params,
   headers: header,
   method: method,
  })
   .then(res => {
    resolve(res.data)
   })
   .catch(error => {
    reject(error)
   })
 })
}

具体通用拦截,请参考 axios 配置,或者自己改写即可,需要符合自身的业务需求。

这里使用 axios 构建出来的资源有问题,不要直接使用,请参考之前的请求封装替换成 fetch,如果有同学构建成功的,请留言 = =!

在具体业务开发使用的时候可以按照模块名引入,容易查找对应的接口模块

import { information } from "@/service/index";

const { data } = await information.getAllInfoGzip({ id });

这套规则同样可以适用于 store、router、utils 等可以拆开模块的地方,有利于项目维护。

上述是针对项目做了一些业务开发上的配置与约定,各位同学可以根据自己团队中的规定与喜好行修改。

其他配置

这里主要是关于 vite.config.ts 的配置,对项目整体做一些附加配置。

import { defineConfig } from 'vite'
import reactRefresh from '@vitejs/plugin-react-refresh'
import vitePluginImp from 'vite-plugin-imp'

export default defineConfig({
 plugins: [
 reactRefresh(),
 vitePluginImp({
  libList: [
  {
   libName: 'antd-mobile',
   style(name) {
   return `antd-mobile/lib/${name}/style/index.css`
   },
  },
  ]
 })
 ],
 resolve: {
 extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
 alias: {
  '@': '/src'
 }
 },
 server: {
 proxy: {
  // 选项写法
  '/api': {
  target: 'https://www.xxx.xxx',
  changeOrigin: true,
  rewrite: (path) => path.replace(/^\/api/, '')
  },
 }
 },
 css: {
 postcss: {
  plugins: [
  require('postcss-pxtorem')({ // 把px单位换算成rem单位
   rootValue: 32, // 换算基数,默认100,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
   propList: ['*'], //属性的选择器,*表示通用
   unitPrecision: 5, // 允许REM单位增长到的十进制数字,小数点后保留的位数。
   exclude: /(node_module)/, // 默认false,可以(reg)利用正则表达式排除某些文件夹的方法
  })
  ]
 }
 }
})

大体也是一些基本内容:

  • vitePluginImp 是将 antd-mobile 进行按需加载
  • postcss-pxtorem 是配置移动端 px 转换的插件
  • server.proxy 配置项目代理
  • resolve.alias 配置别名,如果需要 vscode 正常识别的话,需要 ts.config 也配置一下
{
 "compilerOptions": {
 "baseUrl": "./",
 "paths": {
  "@/*": [
  "src/*"
  ]
 },
}

其中 antd-mobile 可以自行替换成 antd,包括 postcss 也可以根据自己的喜好替换

通过上述的简单改造,此时已经可以进行正常的小项目开发了。完结撒花!

并且已经在用此配置写了一个简单的 H5 项目,后续随着项目的迭代会逐步完善一下模板。

到此这篇关于Vite搭建React项目的方法步骤的文章就介绍到这了,更多相关Vite搭建React项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React+Electron快速创建并打包成桌面应用的实例代码

    React+Electron快速创建并打包成桌面应用的实例代码

    这篇文章主要介绍了React+Electron快速创建并打包成桌面应用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 详细聊聊React源码中的位运算技巧

    详细聊聊React源码中的位运算技巧

    众所周知在React中,主要用到3种位运算符 —— 按位与、按位或、按位非,下面这篇文章主要给大家介绍了关于React源码中的位运算技巧的相关资料,需要的朋友可以参考下
    2021-10-10
  • react组件封装input框的防抖处理的项目实现

    react组件封装input框的防抖处理的项目实现

    本文主要介绍了react组件封装input框的防抖处理的项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Remix如何支持原生 CSS方法详解

    Remix如何支持原生 CSS方法详解

    这篇文章主要为大家介绍了Remix如何支持原生CSS的方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • React Render Props共享代码技术

    React Render Props共享代码技术

    render props是指一种在 React 组件之间使用一个值为函数的 prop 共享代码的技术。简单来说,给一个组件传入一个prop,这个props是一个函数,函数的作用是用来告诉这个组件需要渲染什么内容,那么这个prop就成为render prop
    2023-01-01
  • React 高阶组件HOC用法归纳

    React 高阶组件HOC用法归纳

    高阶组件就是接受一个组件作为参数并返回一个新组件(功能增强的组件)的函数。这里需要注意高阶组件是一个函数,并不是组件,这一点一定要注意,本文给大家分享React 高阶组件HOC使用小结,一起看看吧
    2021-06-06
  • React中的 ref 及原理解析

    React中的 ref 及原理解析

    本章深入探讨了React Ref的用法和原理,还介绍了如何使用useImperativeHandle在函数组件中暴露方法,并详细解释了ref的处理逻辑和原理,包括在commit阶段更新ref以及在组件卸载时的处理,感兴趣的朋友一起看看吧
    2025-01-01
  • React Hooks中模拟Vue生命周期函数的指南

    React Hooks中模拟Vue生命周期函数的指南

    React Hooks 提供了一种在函数组件中使用状态和其他 React 特性的方式,而不需要编写类组件,Vue 的生命周期函数和 React Hooks 之间有一定的对应关系,本文给大家介绍了React Hooks中模拟Vue生命周期函数的指南,需要的朋友可以参考下
    2024-10-10
  • React memo减少重复渲染详解

    React memo减少重复渲染详解

    React.memo为高阶组件。它与React.PureComponent 非常相似,但它适用于函数组件,但不适用于class组件。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-10-10
  • React Native中Navigator的使用方法示例

    React Native中Navigator的使用方法示例

    导航组件Navigator可以让我们客户端在不同的页面见进行切换,下面这篇文章主要给大家介绍了关于React Native中Navigator的使用方法,文中通过图文介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-10-10

最新评论