当前位置:首页>学习笔记>React_TS 学习笔记(1-2)依赖集成步骤

React_TS 学习笔记(1-2)依赖集成步骤

  • 2026-03-26 22:49:50
React_TS 学习笔记(1-2)依赖集成步骤

搭建react_ts后台管理系统项目依赖集成步骤

    以下集成内容仅对思想进行说明,如需进行代码对照,可参考目录下 react19_ts 项目内实际代码,文档与代码会在git上持续补充

    git仓库地址:https://gitee.com/xiaoli-account/react19_ts

React Router 集成

    [参考文档](https://reactrouter.com/en/main/start/tutorial)  

    项目路由管理,页面跳转与导航

1、安装

npm install react-router-dom

2、配置

    1、`src` 目录下新建 `router` 文件夹,内置两个文件(`index.tsx`、                        `routes.ts`)

        `index.tsx` 代表路由配置的唯一出口,导出 `<Routes>` 组件

        `routes.ts` 代表项目的静态路由配置

    2、在 `App.tsx` 中使用 `<BrowserRouter>` 包裹应用

    3、使用 `<Route>` 定义路由规则,嵌套路由使用 `<Outlet />` 渲染子路由

    4、至此项目静态路由集成完毕,动态权限路由需与后台配合制作

3、使用示例

// src/router/index.tsximport { RoutesRouteNavigate } from 'react-router-dom';import LayoutManager from '@/layout';import Login from '@/pages/login';import Dashboard from '@/pages/dashboard';const AppRouter = () => {  return (    <Routes>      <Routepath="/login"element={<Login />} />      <Routepath="/"element={<LayoutManager />}>        <Routeindexelement={<Navigateto="/dashboard"replace />} />        <Routepath="dashboard"element={<Dashboard />} />      </Route>    </Routes>  );};export default AppRouter;
// src/App.tsximport { BrowserRouter } from 'react-router-dom';import AppRouter from './router';function App() {  return (    <BrowserRouter>      <AppRouter />    </BrowserRouter>  );}

Zustand 状态管理集成

[参考文档](https://zustand.docs.pmnd.rs/getting-started/introduction)  

项目全局状态管理,轻量级 React 状态管理库

1、安装

npm install zustand

2、配置

    1、`src` 目录下新建 `store` 文件夹

          - 内置各个模块的独立 store,如:`user.ts`、`app.ts`、`layout.ts` 等

          - `index.ts` 作为统一导出文件

    2、使用 `create` 创建 store,支持中间件(如 `persist` 持久化)

3、使用示例

// src/store/user.tsimport { create } from 'zustand';import { persist } from 'zustand/middleware';interface UserState {  tokenstring;  userInfoany;  setToken(tokenstring) => void;  setUserInfo(infoany) => void;  logout() => void;}export const useUserStore = create<UserState>()(  persist(    set => ({      token'',      userInfonull,      setTokentoken => set({ token }),      setUserInfouserInfo => set({ userInfo }),      logout() => set({ token''userInfonull }),    }),    {      name'user-storage',    }  ));
import { useUserStore } from '@/store/user';function UserProfile() {  const { userInfo, setUserInfo } = useUserStore();  // ...}

## Axios 集成

[参考文档](https://axios-http.com/zh/docs/intro)  

项目的 HTTP 通信,Ajax 请求

1、安装

npm install axios

2、配置

    - 1、`src` 目录下新建 `utils` 文件夹,用来存储项目内使用到的共用方法类

    - 2、在 `utils` 文件夹内新建 `request.ts` 文件

    - 3、创建 axios 实例,为请求的共用配置进行统一处理

    - 4、对实例进行请求与响应的拦截处理

    - 5、额外可拓展:文件下载、文件上传、(GET/POST/PUT/DELETE)的请求            方法封装

3、使用示例

// src/utils/request.tsimport axios, { AxiosInstanceAxiosRequestConfigAxiosResponse } from 'axios';import { message } from 'antd';import { useUserStore } from '@/store/user';const requestAxiosInstance = axios.create({  baseURLimport.meta.env.VITE_APP_BASE_API,  timeout50000,  headers: { 'Content-Type''application/json' },});// 请求拦截器request.interceptors.request.use(  config => {    const token = useUserStore.getState().token;    if (token) {      config.headers.Authorization = `Bearer ${token}`;    }    return config;  },  error => Promise.reject(error));// 响应拦截器request.interceptors.response.use(  (response: AxiosResponse) => {    const { code, data, msg } = response.data;    if (code === 200) {      return data;    } else {      message.error(msg || '请求失败');      return Promise.reject(new Error(msg));    }  },  error => {    message.error(error.message || '网络错误');    return Promise.reject(error);  });export default request;

## qs 集成

[参考文档](https://www.npmjs.com/package/qs)  

配合 axios 使用,序列化 JSON 参数,防止参数格式错误

1、安装

npm install qsnpm install @types/qs -D
2、配置
import qs from 'qs';import axios from 'axios';const request = axios.create({  baseURLimport.meta.env.VITE_APP_BASE_API,  timeout50000,  headers: { 'Content-Type''application/json' },  paramsSerializer: {    serialize(params) {      return qs.stringify(params, { allowDotstrue });    },  },});

## js-cookie 集成

[参考文档](https://www.npmjs.com/package/js-cookie)  

浏览器 Cookie 操作库

1、安装
npm install js-cookienpm install @types/js-cookie -D
2、配置
// src/utils/storage.tsimport Cookies from 'js-cookie';export const TOKEN_KEY = 'access_token';export const getToken = () => Cookies.get(TOKEN_KEY);export const setToken = (tokenstring) => Cookies.set(TOKEN_KEY, token);export const removeToken = () => Cookies.remove(TOKEN_KEY);

## i18next 国际化集成

    [参考文档](https://react.i18next.com/)  

    React 国际化实现插件,中英文切换功能

1、安装
npm install i18next react-i18next i18next-browser-languagedetector i18next-http-backend

2、配置

    - 1、`src` 目录下新建 `i18n` 文件夹,内置 `index.ts` 入口文件与语言包

    - 2、`index.ts` 内配置 i18next 插件

    - 3、在 `main.tsx` 中引入 i18n 配置

### 3、使用示例

// src/i18n/index.tsimport i18n from 'i18next';import { initReactI18next } from 'react-i18next';import LanguageDetector from 'i18next-browser-languagedetector';import zhCN from './locales/zh-CN.json';import enUS from './locales/en-US.json';i18n  .use(LanguageDetector)  .use(initReactI18next)  .init({    resources: {      'zh-CN': { translation: zhCN },      'en-US': { translation: enUS },    },    fallbackLng'zh-CN',    interpolation: {      escapeValuefalse,    },  });export default i18n;
// 组件中使用import { useTranslation } from 'react-i18next';function MyComponent() {  const { t, i18n } = useTranslation();  return (    <div>      <h1>{t('welcome')}</h1>      <buttononClick={() => i18n.changeLanguage('en-US')}>English</button>    </div>  );}

## iconfont集成

[参考文档]

(https://www.iconfont.cn/help/detail?spm=a313x.manage_type_myprojects.i3.48.84e93a815Qrxgj&helptype=code)

1、安装、配置

    - 1、本次使用font-class 引用

    - 2、进入【资源管理】-【我的项目】-【选中项目】-【选择font-class】-            【查看在线链接】

    - 3、找到类似下方链接

            `//at.alicdn.com/t/c/font_1557744_9lcj2fgybmk.css`

    - 4、点击链接,进入一个新浏览器标签,会看到网页上的css代码,复制代码

    - 5、进入src/assets目录新建目录iconfont/iconfont.css

    - 6、将复制的代码存放与iconfont.css文件内保存

    - 7、在main.tsx文件内,引入iconfont.css文件

## Ant Design 集成

[参考文档](https://ant.design/docs/react/introduce-cn)  

企业级 UI 组件库

1、安装

npm install antdnpm install @ant-design/icons

2、配置

// src/App.tsximport { ConfigProvider } from 'antd';import zhCN from 'antd/locale/zh_CN';import 'antd/dist/reset.css';function App() {  return <ConfigProviderlocale={zhCN}>{/* 应用内容 */}</ConfigProvider>;}

3、按需引入(自动)

Vite 项目中,Ant Design 5.x 默认支持 Tree Shaking,无需额外配置。

## Sass 编译器集成

[官方文档](https://sass-lang.com/)  

[参考文档](https://www.npmjs.com/package/sass)

1、安装

npm install sass

2、配置

    - 1、安装完成后,在项目内即可使用 `.scss` 文件

    - 2、在 `vite.config.ts` 中配置全局 SCSS 变量

// vite.config.tsexport default defineConfig({  css: {    preprocessorOptions: {      scss: {        additionalData: `@use "@/styles/variables.scss" as *;`,      },    },  },});

3、使用方式

// src/styles/variables.scss$primary-color: #1890ff;$font-size-base: 14px;
// 组件中使用import './index.scss';function MyComponent() {  return <divclassName="my-component">Hello</div>;}
// index.scss.my-component {  color: $primary-color;  font-size: $font-size-base;}

## TailwindCSS 样式库集成

[参考文档](https://tailwindcss.com/docs/installation/using-vite)  

原子化 CSS 框架

1、安装

npm install tailwindcss @tailwindcss/postcss autoprefixer

2、配置

// vite.config.tsimport tailwindcss from '@tailwindcss/vite';export default defineConfig({  plugins: [react(), tailwindcss()],});
// tailwind.config.jsmodule.exports = {  content: ['./index.html''./src/**/*.{js,ts,jsx,tsx}'],  theme: {    extend: {},  },  plugins: [],};
/* src/index.css */@import 'tailwindcss';

3、使用示例

function Button() {  return (    <buttonclassName="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">Click me</button>  );}

4、VS Code 插件

安装 **Tailwind CSS IntelliSense** 插件获得智能提示。

## NProgress 路由加载动画集成

[参考文档](https://www.npmjs.com/package/nprogress)  

路由切换时的加载进度条

1、安装

npm install nprogressnpm install @types/nprogress -D

2、工具封装

在 `src/utils/nprogress.ts` 中封装:

// src/utils/nprogress.tsimport NProgress from 'nprogress';import 'nprogress/nprogress.css';// 配置 NProgressNProgress.configure({  showSpinnerfalse// 不显示右上角的旋转图标  trickleSpeed200// 自动递增间隔  minimum0.3// 初始化时的最小百分比  easing'ease'// 动画方式  speed500// 递增进度条的速度});/** * 开始加载进度条 */export const startProgress = (): void => {  NProgress.start();};/** * 完成加载进度条 */export const doneProgress = (): void => {  NProgress.done();};/** * 设置进度条百分比 */export const setProgress = (nnumber): void => {  NProgress.set(n);};export default {  start: startProgress,  done: doneProgress,  set: setProgress,};

3、自定义样式

在 `src/styles/nprogress.scss` 中自定义样式:

// src/styles/nprogress.scss#nprogress {  pointer-events: none;}#nprogress .bar {  backgroundlinear-gradient(90deg#1890ff 0%#52c41a 100%);  position: fixed;  z-index9999;  top0;  left0;  width100%;  height3px;  box-shadow0 0 10px rgba(241442550.5);}#nprogress .peg {  display: block;  position: absolute;  right0;  width100px;  height100%;  box-shadow:    0 0 10px rgba(241442550.8),    0 0 5px rgba(241442550.8);  opacity1;  transformrotate(3degtranslate(0px, -4px);}

4、集成到路由

推荐方式:在 `src/router/index.tsx` 中集成

将 `RouteProgress` 组件放在路由文件中,使路由相关逻辑更内聚:

// src/router/index.tsximport { RoutesRoute, useLocation } from 'react-router-dom';import { useEffect } from 'react';import { startProgress, doneProgress } from '@/utils/nprogress';import '@/styles/nprogress.scss';/** * 路由加载进度条组件 * 监听路由变化,自动显示/隐藏加载进度条 */function RouteProgress() {  const location = useLocation();  useEffect(() => {    startProgress();    const timer = setTimeout(() => {      doneProgress();    }, 300);    return () => {      clearTimeout(timer);      doneProgress();    };  }, [location.pathname]);  return null;}const AppRouter = () => {  return (    <>      <RouteProgress />      <Routes>{/* 路由配置 */}</Routes>    </>  );};export default AppRouter;

为什么推荐这种方式?

    1. 职责更清晰:路由相关的功能都在 `router` 目录中

    2. 更好的内聚性:进度条是路由切换的副作用,放在路由文件中更合理

    3. 更易维护:修改路由加载逻辑只需修改 `router/index.tsx`

App.tsx 保持简洁:

// src/App.tsximport { BrowserRouter } from 'react-router-dom';import AppRouter from './router';function App() {  return (    <BrowserRouter>      <AppRouter />    </BrowserRouter>  );}

5、使用示例

1、自动使用(已在 router/index.tsx 中配置)

路由切换时会自动显示加载进度条,无需手动调用。

    2、手动控制

import { startProgress, doneProgress, setProgress } from '@/utils/nprogress';// 开始加载startProgress();// 设置进度(0-1)setProgress(0.5);// 完成加载doneProgress();

3、在异步操作中使用

import { startProgress, doneProgress } from '@/utils/nprogress';const fetchData = async () => {  startProgress();  try {    const data = await api.getData();    return data;  } finally {    doneProgress();  }};

6、常见问题

NProgress 进度条不显示?

    检查是否引入了样式文件:

// src/router/index.tsximport '@/styles/nprogress.scss';

如何修改进度条颜色?

编辑 `src/styles/nprogress.scss` 文件:

#nprogress .bar {  background: linear-gradient(90deg, #1890ff 0%#52c41a 100%);}

如何调整进度条速度?

    修改 `src/utils/nprogress.ts` 中的配置:

NProgress.configure({  trickleSpeed200// 调整这个值  speed500// 调整这个值});

## gm-crypt加密工具集成

1、安装

npm install gm-crypt

2、配置

    - 参考当前目录下的react19_ts项目下login页面中的实际使用

    - src/utils/sm4.ts

    - src/store/user.ts

    - 为避免在使用时发生的ts类型检查错误,需对插件进行自定以类型声明,

    - 新建文件:gm-crypt.d.ts

declare module 'gm-crypt' {  export class sm4 {    constructor(configSM4Config);    encrypt(plaintextstring): string;    decrypt(ciphertextstring): string;  }  export interface SM4Config {    keystring;    mode'ecb' | 'cbc';    iv?: string;    outType?: 'base64' | 'text';  }}

## crypto-js 加密工具集成

[参考文档](https://www.npmjs.com/package/crypto-js)  

JavaScript 加密库

1、安装

npm install crypto-jsnpm install @types/crypto-js -D

2、工具封装

在 `src/utils/crypto.ts` 中封装常用加密方法:

// src/utils/crypto.tsimport CryptoJS from 'crypto-js';// 默认密钥(建议从环境变量读取)const DEFAULT_SECRET_KEY = import.meta.env.VITE_CRYPTO_SECRET_KEY || 'react19-ts-default-key';/** * AES 加密 */export const encryptAES = (datastringsecretKeystring = DEFAULT_SECRET_KEY): string => {  try {    return CryptoJS.AES.encrypt(data, secretKey).toString();  } catch (error) {    console.error('AES 加密失败:', error);    return '';  }};/** * AES 解密 */export const decryptAES = (ciphertextstringsecretKeystring = DEFAULT_SECRET_KEY): string => {  try {    const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);    return bytes.toString(CryptoJS.enc.Utf8);  } catch (error) {    console.error('AES 解密失败:', error);    return '';  }};/** * MD5 加密(不可逆) */export const encryptMD5 = (datastring): string => {  return CryptoJS.MD5(data).toString();};/** * SHA256 加密(不可逆) */export const encryptSHA256 = (datastring): string => {  return CryptoJS.SHA256(data).toString();};/** * Base64 编码 */export const encodeBase64 = (datastring): string => {  return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data));};/** * Base64 解码 */export const decodeBase64 = (base64Stringstring): string => {  return CryptoJS.enc.Base64.parse(base64String).toString(CryptoJS.enc.Utf8);};/** * 加密对象(先转 JSON 再 AES 加密) */export const encryptObject = (objanysecretKey?: string): string => {  try {    const jsonString = JSON.stringify(obj);    return encryptAES(jsonString, secretKey);  } catch (error) {    console.error('对象加密失败:', error);    return '';  }};/** * 解密对象(先 AES 解密再解析 JSON) */export const decryptObject = <T = any>(ciphertextstringsecretKey?: string): T | null => {  try {    const jsonString = decryptAES(ciphertext, secretKey);    return JSON.parse(jsonString) as T;  } catch (error) {    console.error('对象解密失败:', error);    return null;  }};

### 3、使用示例

1、基本使用

import {  encryptAES,  decryptAES,  encryptMD5,  encryptSHA256,  encryptObject,  decryptObject,from '@/utils/crypto';// AES 加密/解密const password = '123456';const encrypted = encryptAES(password);console.log('加密后:', encrypted);const decrypted = decryptAES(encrypted);console.log('解密后:', decrypted);// MD5 加密(不可逆)const md5Hash = encryptMD5(password);console.log('MD5:', md5Hash);// SHA256 加密(不可逆)const sha256Hash = encryptSHA256(password);console.log('SHA256:', sha256Hash);// 对象加密/解密const userInfo = { username'admin'role'admin' };const encryptedObj = encryptObject(userInfo);console.log('加密对象:', encryptedObj);const decryptedObj = decryptObject(encryptedObj);console.log('解密对象:', decryptedObj);

2、在登录中使用

// src/pages/login/index.tsximport { encryptAES } from '@/utils/crypto';import { login } from '@/services/auth';const handleLogin = async (values: LoginForm) => {  // 加密密码  const encryptedPassword = encryptAES(values.password);  const res = await login({    username: values.username,    password: encryptedPassword,  });  // 处理登录结果...};

3、TypeScript 类型支持

// 自动类型推断const encryptedstring = encryptAES('hello');const decryptedstring = decryptAES(encrypted);// 泛型支持interface User {  idnumber;  namestring;}const userUser = { id1name'Admin' };const encryptedUser = encryptObject(user);const decryptedUser = decryptObject<User>(encryptedUser);// decryptedUser 的类型为 User | null

4、环境变量配置

在 `.env.development` 和 `.env.production` 中添加:

# 加密密钥(建议生产环境使用不同的密钥)VITE_CRYPTO_SECRET_KEY=your-secret-key-here

使用环境变量:

const secretKey = import.meta.env.VITE_CRYPTO_SECRET_KEY;const encrypted = encryptAES(data, secretKey);

5、常见问题

    加密后的数据无法解密?

        - 确保使用相同的密钥

        - 检查加密数据是否被截断或修改

        - 确保加密和解密使用相同的算法

## lodash-es 工具库集成

JavaScript 实用工具库 [参考文档](https://lodash.com/)  

1、安装

npm install lodash-esnpm install @types/lodash-es -D

2、使用示例

import { debounce, cloneDeep, isEmpty } from 'lodash-es';// 防抖const handleSearch = debounce((valuestring) => {  console.log(value);}, 300);// 深拷贝const newObj = cloneDeep(originalObj);// 判空if (isEmpty(data)) {  // ...}

## localforage 本地存储集成

[参考文档](https://localforage.github.io/localForage/)  

异步本地存储库,支持 IndexedDB、WebSQL、localStorage

1、安装

npm install localforage

2、使用示例

// src/utils/storage.tsimport localforage from 'localforage';localforage.config({  name'react19_ts',  storeName'app_storage',});export const setItem = async (keystringvalueany) => {  await localforage.setItem(key, value);};export const getItem = async (keystring) => {  return await localforage.getItem(key);};export const removeItem = async (keystring) => {  await localforage.removeItem(key);};

## LogicFlow 流程图引擎集成

[参考文档](https://site.logic-flow.cn/)  

专注于业务流程图的前端框架

1、安装

npm install @logicflow/core @logicflow/extension

2、使用示例

import LogicFlow from '@logicflow/core';import '@logicflow/core/dist/style/index.css';import { useEffect, useRef } from 'react';functionFlowChart() {  const containerRef = useRef<HTMLDivElement>(null);  useEffect(() => {    if(!containerRef.current) return;    const lf new LogicFlow({      container: containerRef.current,      gridtrue,    });    lf.render({      nodes: [        { id'1', type'rect', x100, y100, text'节点1' },        { id'2', type'circle', x300, y100, text'节点2' },      ],      edges: [{ sourceNodeId'1', targetNodeId'2' }],    });  }, []);  return <div ref={containerRef} style={{ width: '100%', height: '500px' }} />;}

## animate.css 动画库集成

[参考文档](https://animate.style/)  

CSS 动画库

1、安装

npm install animate.css

2、使用示例

import 'animate.css';function AnimatedComponent() {  return <divclassName="animate__animated animate__fadeIn">Hello World</div>;}

## vite-plugin-obfuscator 代码混淆工具集成

    [参考文档](https://www.npmjs.com/package/vite-plugin-obfuscator)  

    生产环境代码混淆

1、安装

npm install vite-plugin-obfuscator -D

2、配置

// vite.config.tsimport obfuscator from 'vite-plugin-obfuscator';export default defineConfig(({ mode }) => ({  plugins: [    react(),    mode === 'production' &&      obfuscator({        options: {          compacttrue,          controlFlowFlatteningfalse,          deadCodeInjectionfalse,          debugProtectionfalse,          debugProtectionInterval0,          disableConsoleOutputtrue,          identifierNamesGenerator'hexadecimal',          logfalse,          renameGlobalsfalse,          rotateStringArraytrue,          selfDefendingtrue,          stringArraytrue,          stringArrayEncoding: ['base64'],          stringArrayThreshold0.75,          unicodeEscapeSequencefalse,        },      }),  ].filter(Boolean),}));

3、使用说明

    构建生产版本

npm run build

    代码混淆会自动在生产构建时启用,无需手动配置。

    混淆配置说明

    在 `vite.config.ts` 中已配置:

        - ✅ 压缩代码 (`compact: true`)

        - ✅ 字符串数组化 (`stringArray: true`)

        - ✅ Base64 编码 (`stringArrayEncoding: ['base64']`)

        - ✅ 自我防御 (`selfDefending: true`)

        - ✅ 禁用 console 输出 (`disableConsoleOutput: true`)

查看混淆效果

    构建后查看 `dist/assets/js/*.js` 文件,代码已被混淆。

4、TypeScript 类型声明

    在 `src/types/vite-plugin-obfuscator.d.ts` 中添加类型声明:

declare module 'vite-plugin-obfuscator' {  import { Plugin } from 'vite';  interface ObfuscatorOptions {    compact?: boolean;    controlFlowFlattening?: boolean;    deadCodeInjection?: boolean;    debugProtection?: boolean;    disableConsoleOutput?: boolean;    identifierNamesGenerator?: 'hexadecimal' | 'mangled' | 'dictionary';    selfDefending?: boolean;    stringArray?: boolean;    stringArrayEncoding?: Array<'none' | 'base64' | 'rc4'>;    stringArrayThreshold?: number;    // ... 更多选项  }  interface ObfuscatorConfig {    options?: ObfuscatorOptions;  }  function obfuscator(config?: ObfuscatorConfig): Plugin;  export default obfuscator;}

5、常见问题

代码混淆后报错?

    - 检查是否有动态代码执行(如 `eval`)

    - 某些第三方库可能不兼容混淆

    - 可以在 `vite.config.ts` 中调整混淆选项或排除特定文件

## ESLint 代码检查集成

[参考文档](https://eslint.org/)

1、安装

npm install eslint @eslint/js typescript-eslint -Dnpm install eslint-plugin-react-hooks eslint-plugin-react-refresh -D

2、配置

// eslint.config.jsimport js from '@eslint/js';import tseslint from 'typescript-eslint';import reactHooks from 'eslint-plugin-react-hooks';import reactRefresh from 'eslint-plugin-react-refresh';export default [  js.configs.recommended,  ...tseslint.configs.recommended,  {    plugins: {      'react-hooks': reactHooks,      'react-refresh': reactRefresh,    },    rules: {      'react-hooks/rules-of-hooks''error',      'react-hooks/exhaustive-deps''warn',      'react-refresh/only-export-components''warn',    },  },];

## Prettier 代码格式化集成

- 它会帮助你保持团队代码风格的一致性 [官方文档](https://prettier.io/)

1、安装

npm install prettier -D

2、配置

    - 1、创建 Prettier 配置文件

        在项目根目录创建 .prettierrc 文件:

// .prettierrc{  "semi": true,  "trailingComma": "es5",  "singleQuote": true,  "printWidth": 100,  "tabWidth": 2,  "useTabs": false,  "bracketSpacing": true,  "arrowParens": "always"}

    - 2、创建忽略文件

    创建 .prettierignore 文件,指定不需要格式化的文件:

# 构建目录distbuild.out# 依赖目录node_modules# 缓存目录.cache# 系统文件.DS_Store# 环境配置.env.env.local.env.development.local.env.test.local.env.production.local# 其他*.min.js*.min.css

    - 3、配置 package.json 脚本

// package.json [npm run format] 运行项目代码格式化命令{  "scripts": {    "format": "prettier --write .",    "format:check": "prettier --check ."  }}

3、VS Code 配置

在 `.vscode/settings.json` 中配置:

{  "editor.defaultFormatter": "esbenp.prettier-vscode",  "editor.formatOnSave": true}

4、使用示例

1、命令行使用

# 格式化所有文件npm run format# 检查格式(不修改文件)npm run format:check

2、手动格式化

    - 快捷键:`Shift + Alt + F` (Windows/Linux) 或 `Shift + Option + F` (Mac)

5、常见问题

Prettier 格式化不生效?

- 安装 VS Code 插件:`Prettier - Code formatter`

- 检查 `.prettierrc` 配置文件是否存在

- 确保文件不在 `.prettierignore` 中

## vite-plugin-mock服务集成

参考文档

https://github.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md

- 此插件源于vite,提供本地和生产模拟服务。

- vite 的数据模拟插件,是基于 vite.js 开发的。 并同时支持本地环境和生产环境。

1、安装

`npm install mockjs vite-plugin-mock -D`

2、配置

    - 1、在`vite.config.ts`中进行下方写法配置,属性值可参考github上官方文档

 const env loadEnv(mode, process.cwd());  const runMode = mode;  const isMock = runMode === "mock";  return{    plugins: [      react() as PluginOption,      // mock环境      viteMockServe({        mockPath'mock',        watchFilestrue,        enable: isMock,      })    ],  }

    - 2、根目录新建mock文件夹,具体结构可参考下方,详细代码可参考同级目录的            react19_ts项目

---mock-----login--------index.ts-----index.ts

    - 3、`package.json`项目mock启动配置

"scripts": {"mock": "vite --mode mock",},

## uuid生成库

    [参考文档](https://www.npmjs.com/package/uuid)

1、安装

npm install uuid

2、配置

    - 新建uuid公用函数,对插件的功能进行包装使用

    - 参考项目内目录:src/utils/uuid.ts

## 包管理工具推荐

npm(默认)

npm installnpm run dev

pnpm(推荐)

    [参考文档](https://pnpm.io/zh/)

# 安装 pnpmnpm install -g pnpm# 配置镜像源(可选)pnpm config set registry https://registry.npmmirror.com# 安装依赖pnpm install# 启动项目pnpm run dev

优势:

    - 节省磁盘空间(硬链接机制)

    - 安装速度更快

    - 更严格的依赖管理

## 可视化图表库

    [参考文档](https://echarts.apache.org/handbook/zh/basics/download)

1、安装

`npm install echarts`

2、配置

    - 新建uuid公用函数,对插件的功能进行包装使用

    - 参考项目内目录:src/utils/uuid.ts

依赖版本说明

    当前项目主要依赖版本:

| 依赖             | 版本    | 说明           || ---------------- | ------- | -------------- || react            | ^19.2.0 | React 核心库   || react-dom        | ^19.2.0 | React DOM 渲染 || react-router-dom | ^7.12.0 | React 路由     || zustand          | ^5.0.9  | 状态管理       || antd             | ^6.1.4  | UI 组件库      || axios            | ^1.13.2 | HTTP 客户端    || tailwindcss      | ^4.1.18 | 原子化 CSS     || vite             | ^7.2.4  | 构建工具       || typescript       | ~5.9.3  | TypeScript     |

## md文档操作库

    - [react-markdown](https://www.npmjs.com/package/react-markdown)

    - md文档GFM 特性增强

        [remark-gfm](https://www.npmjs.com/package/remark-gfm)

1、安装

`npm i react-markdown``npm i remark-gfm`

2、配置

    - 建议封装为公用组件使用

3、使用示例

import ReactMarkdown from "react-markdown";import remarkGfm from "remark-gfm";<ReactMarkdownremarkPlugins={[remarkGfm]}>  {docContent}</ReactMarkdown>

常见问题

1. 依赖安装失败?

# 清除缓存npm cache clean --force# 删除 node_modules 和 lock 文件rm -rf node_modules package-lock.json# 重新安装npm install

2. TypeScript 类型错误?

    确保安装了对应的 `@types` 包:

npm install @types/node @types/react @types/react-dom -D

3. Vite 环境变量读取不到?

    - 环境变量必须以 `VITE_` 开头

    - 使用 `import.meta.env.VITE_XXX` 访问

    - 在 `vite.config.ts` 中使用 `loadEnv` 加载

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-29 07:41:20 HTTP/2.0 GET : https://67808.cn/a/477706.html
  2. 运行时间 : 0.180919s [ 吞吐率:5.53req/s ] 内存消耗:4,657.52kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=69537ad9cd4ddb390068754cee3838a3
  1. /yingpanguazai/ssd/ssd1/www/no.67808.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/no.67808.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/no.67808.cn/runtime/temp/6df755f970a38e704c5414acbc6e8bcd.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000742s ] mysql:host=127.0.0.1;port=3306;dbname=no_67808;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001430s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000580s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002975s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001195s ]
  6. SELECT * FROM `set` [ RunTime:0.000529s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001493s ]
  8. SELECT * FROM `article` WHERE `id` = 477706 LIMIT 1 [ RunTime:0.003755s ]
  9. UPDATE `article` SET `lasttime` = 1774741280 WHERE `id` = 477706 [ RunTime:0.004412s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000482s ]
  11. SELECT * FROM `article` WHERE `id` < 477706 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001236s ]
  12. SELECT * FROM `article` WHERE `id` > 477706 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002389s ]
  13. SELECT * FROM `article` WHERE `id` < 477706 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007263s ]
  14. SELECT * FROM `article` WHERE `id` < 477706 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003630s ]
  15. SELECT * FROM `article` WHERE `id` < 477706 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005542s ]
0.184103s