React+Vite+eslint+ts搭建框架及基础配置
如今的前端框架基本以 React 和 Vue 为主, Vite 好似与Vue更配,但是对 React的支持也是很友好的,在我们使用 React脚手架初始化项目时候,默认使用的还是 Webpack,当我们开发项目到达一定的程度,Webpack的构建时间就会很长,所以尝试使用Vite来替换,Vite 开发环境下使用 esbuild,他不会对整个项目打包,使得他的项目运行速度非常快,开发体验也就比 Webpack 要好。
兼容性注意 Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。
npm create vite@版本号 my-app

生成框架如下:

基本框架的搭建实现一个可以路由跳转的功能

routerCOnfig.ts
import { lazy } from "react";
// 引入路由类型
import { RouterItem, RouterList } from "../utills/type";
// 定义二级路由,包含具体的页面路径和元素,以及标题
export const homeRouters: RouterItem[] = [
{
path: '/home/index',
element: lazy(() => import('../Views/Index/index')),
title: "首页"
},
{
path: '/home/project',
element: lazy(() => import('../Views/Project/index')),
title: "项目"
},
]
// 定义一级路由配置,使用history模式
// 包含根路径重定向、home路由、Login路由和默认错误页面
const routerList: RouterList = {
mode: 'history',
routes: [
{
path: '/',
to: '/home/index',
},
{
path: '/home',
element: lazy(() => import('../Views/Home/index')),
children: homeRouters,// 嵌套子路由
},
{
path: '/login',
element: lazy(() => import('../Views/Login/index')),
},
{
path: '*',
element: lazy(() => import('../Views/Error/index')),
}
]
}
export default routerList// 导出路由配置供其他模块使用
utills下的定义路由类型
import { JSXElement } from "react";
//定义了路由项的类型,包含了路径、跳转地址、标题、元素、子路由和推送功能
export type RouterItem={
path?: string, // 路径
to?: string, // 跳转地址
title?: string, // 标题
element?: JSXElement, // React元素
children?: RouteItem[], // 子路由项数组
push?:any // 推送功能,具体类型根据实际情况定义
}
//定义了路由列表的类型,包含了模式和路由项数组
export type RouterList={
mode:string, // 模式名称
routes:RouteItem[] // 路由项数组
}
routerView.tsx
import {Suspense} from 'react' // 导入React库和Suspense组件
import { BrowserRouter,HashRouter,Route,Routes,Navigate } from 'react-router-dom' // 导入React Router相关组件
import routerList from './routerConfig' // 导入路由配置
import { RouterItem } from '../utills/type' // 导入路由项类型定义
// 该组件根据routerList配置渲染对应的路由
function RouterView() {
// 解构获取路由模式和路由数组
const {mode,routes}=routerList;
// 递归渲染路由数组中的每个路由项
const rendeRoutes=(arr:RouterItem[])=>{
return arr && arr.map((item,index)=>{
return <Route key={index} path={item.path} element={item.to?<Navigate to={item.to}></Navigate>:<item.element></item.element>}>
{
// 如果有子路由,递归调用rendeRoutes
item.children && rendeRoutes(item.children)
}
</Route>
})
}
return (
// 使用Suspense处理路由组件异步加载状态 白屏优化
<Suspense fallback={<div>加载中.......</div>}>
{
// 根据模式选择渲染BrowserRouter或HashRouter
mode==="history"?<BrowserRouter>
<Routes>
{
rendeRoutes(routes) // 根据路由配置渲染路由
}
</Routes>
</BrowserRouter>:<HashRouter>
<Routes>
{
rendeRoutes(routes) // 根据路由配置渲染路由
}
</Routes>
</HashRouter>
}
</Suspense>
)
}
export default RouterView // 导出路由视图组件
App.tsx导入路由

页面写路由出口以供跳转

配置 less,不需要在 vite.config.ts 中添加任何配置
npm install less less-loader -D
配置 eslint
npm install eslint --D
npx eslint --init
.eslintrc.json 文件配置
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"react-app"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"react",
"react-hooks"
],
"rules": {
"no-console": "warn",
"no-debugger": "warn",
"no-alert": "warn",
"camelcase": "warn",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
}
}
// 如果不生效可查看是否安装以下依赖,如果没有安装需安装
npm install eslint-plugin-react-hooks eslint-config-react-app -D
配置 alias 别名
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import path from 'path'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
server: {
port: 8080,
open: true,
},
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
}
})
// tsconfig.json
{
...,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
},
}
当配置文件中遇到__dirname变量无法正确解析时,可以尝试通过npm安装@types/node开发依赖来解决。安装命令为npminstall@types/node--save-dev,此方法通常能确保类型定义正确,使__dirname在项目中正常工作。
解决方法:安装@types/node
npm install @types/node -D
建议关闭严格模式,因为不能自动检测副作用,有意双重调用。将严格模式注释即可。
配置 scss
npm install sass
将项目初始化时的global.scss文件,修改为.scss后缀后即可书写sass代码。
vite.config.ts中注册全局样式
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import tailwindcss from "tailwindcss"
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
// 配置别名
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
},
// 新增 css 配置
css: {
postcss: {
plugins: [tailwindcss()],
},
preprocessorOptions: {
scss: {
// 两种方式都可以
additionalData: '@import "@/assets/styles/global.scss";'
// additionalData: '@use "@/assets/scss/global.scss" as *;'
}
}
}
})

更多推荐

所有评论(0)