vite项目构建配置
1、用vite搭建项目
使用npm create vite@latest构建项目,配置项选项react->ts+SWC即可。
让后打开项目npm i。
2、项目配置
2.1、vite配置
主要是配置用到的插件(plugins--比如:svg、mock等)、路径、环境变量的使用、打包、路径重写等操作。
// 导入React插件,使用Swc作为JSX到JS的转换器,提高构建速度
import react from '@vitejs/plugin-react-swc'
// 导入Vite的类型定义,用于类型安全的配置
import type { ConfigEnv, UserConfig } from 'vite'
// 导入Vite的环境变量加载函数
import { loadEnv } from 'vite'
// 导入自定义的环境变量处理函数
import { wrapperEnv } from './scripts/utils'
// 导入SVG图标插件
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
// 导入Vite的模拟请求插件
import { viteMockServe } from 'vite-plugin-mock'
// 导入Node.js的路径解析模块
import { resolve } from 'path'// 定义并导出配置函数,接收命令和模式参数,返回用户配置对象
export default({command, mode}: ConfigEnv): UserConfig => {// 获取项目根目录的绝对路径const root = process.cwd()// 判断当前命令是否为构建命令const isBuild = command === 'build'// 根据模式加载环境变量const env = loadEnv(mode, root)// 使用自定义函数处理环境变量,可能包括类型转换或逻辑处理const viteEnv: any = wrapperEnv(env)// 解构赋值,从处理后的环境变量中提取端口号和控制台日志开关const { VITE_PORT, VITE_DROP_CONSOLE } = viteEnv// 返回配置对象return {// 部署路径,空字符串意味着部署在根目录base : '',// 服务器配置server: {// 监听所有网络接口host: '0.0.0.0',// 设置服务器端口port: VITE_PORT,// 启动服务器时自动打开浏览器open: true,// 关闭HTTPShttps: false,// 代理配置,此处未配置代理规则proxy: {},},// 插件配置plugins: [// 启用React插件react(),// 配置SVG图标插件createSvgIconsPlugin({// 指定图标目录iconDirs: [resolve(process.cwd(), 'src/assets/icons')],// 设置生成的SVG图标ID前缀symbolId: 'icon-[dir]-[name]'}),// 配置模拟请求插件viteMockServe({// 模拟数据目录mockPath: 'mock',// 忽略以_开头的文件ignore: /^_/,// 开发环境启用模拟数据localEnabled: !isBuild,// 生产环境启用模拟数据prodEnabled: isBuild,// 注入代码,用于初始化生产环境的模拟数据injectCode: `import { setupProdMockServer } from 'mock/_createProductionServer';setupProdMockServer()`})],// 构建配置build: {// 设置目标ES版本target: 'es2015',// 设置CSS兼容性目标cssTarget: 'chrome86',// 使用Terser进行代码压缩minify: 'terser',// Terser的配置选项terserOptions: {// 压缩选项compress: {// 保留Infinity关键字keep_infinity: true,// 生产环境删除控制台日志drop_console: VITE_DROP_CONSOLE}},// 设置警告的代码块大小限制chunkSizeWarningLimit: 2000},// 路径别名配置resolve: {// 设置@别名指向src目录alias: {'@': resolve(__dirname, './src')}}}
}utils.js
declare type Recordable<T = any> = Record<string, T>interface ViteEnv {VITE_PORT: numberVITE_PROXY: [string, string][]VITE_DROP_CONSOLE: boolean
}// read all environment variable configuration files to process.env
export function wrapperEnv(envConf: Recordable): ViteEnv {const result: any = {}for (const envName of Object.keys(envConf)) {let realName = envConf[envName].replace(/\\n/g, '\n')realName = realName === 'true' ? true : realName === 'false' ? false : realNameif (envName === 'VITE_PORT') {realName = Number(realName)}if (envName === 'VITE_PROXY' && realName) {try {realName = JSON.parse(realName.replace(/'/g, '"'))} catch (error) {realName = ''}}result[envName] = realNameif (typeof realName === 'string') {process.env[envName] = realName} else if (typeof realName === 'object') {process.env[envName] = JSON.stringify(realName)}}return result
}
2.2、eslint+prettier代码检测
在json配置文件中的scripts执行操作下添加:
"lint:eslint": "eslint --cache \"{src,mock,build}/**/*.{js,ts,tsx}\" --fix",
"lint:prettier": "prettier --write \"src/**/*.{js,json,ts,tsx,css,less,html,md}\"",
2.2.1、eslint
用到的库:
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.0.0",
"eslint-define-config": "^2.1.0",
"eslint-plugin-prettier": "^5.0.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"vite-plugin-eslint": "^1.8.1",
eslint.config.js配置文件--文件是 ESLint 的配置文件之一,它以 JavaScript 文件的形式存在,用于定义 ESLint 的配置规则。在早期版本的 ESLint 中,配置文件可能被命名为 .eslintrc
、.eslintrc.json
或 .eslintrc.yml
等,但在 ESLint 8.0.0 版本之后,默认推荐使用 eslint.config.{js,cjs,mjs}
这样的命名方式
// 配置文档: https://eslint.nodejs.cn/
import { defineFlatConfig } from 'eslint-define-config'
import configPrettier from 'eslint-config-prettier'
import pluginPrettier from 'eslint-plugin-prettier'
import * as parserTypeScript from '@typescript-eslint/parser'
import pluginTypeScript from '@typescript-eslint/eslint-plugin'
import js from '@eslint/js'/** @type {import('eslint-define-config').FlatESLintConfig} */
export default defineFlatConfig([{...js.configs.recommended,ignores: ['src/assets/**'],plugins: {prettier: pluginPrettier},rules: {...configPrettier.rules,...pluginPrettier.configs.recommended.rules,/** Eslint规则配置* 配置文档: https://eslint.nodejs.cn/docs/latest/rules/*/// 需要 let 或 const 而不是 var'no-var': 'error',// 禁止在定义变量之前使用变量'no-use-before-define': 'off',// 声明后永远不会重新分配的变量需要 const 声明'prefer-const': 'error',// 禁止不规则空格'no-irregular-whitespace': 'off',// 禁止使用 debugger'no-debugger': 'off',// 禁止未使用的变量'no-unused-vars': ['error',{argsIgnorePattern: '^_',varsIgnorePattern: '^_'}],// 使用 prettier 插件'prettier/prettier': ['error',{endOfLine: 'auto'}]}},{files: ["**/*.?([cm])ts", "**/*.?([cm])tsx"],languageOptions: {parser: parserTypeScript,parserOptions: {ecmaVersion: 2020,sourceType: 'module',jsxPragma: 'React',ecmaFeatures: {jsx: true}},},plugins: {'@typescript-eslint': pluginTypeScript},rules: {...pluginTypeScript.configs.recommended.rules,/** TypeScript规则配置* 配置文档: https://typescript-eslint.nodejs.cn/rules/)*/// 根据参数、属性和变量的默认值或初始值推断其类型'@typescript-eslint/no-inferrable-types': 'off',// 禁止使用自定义 ts 模块和命名空间'@typescript-eslint/no-namespace': 'off',// 禁止使用 any 类型'@typescript-eslint/no-explicit-any': 'off',// 禁止使用特定类型'@typescript-eslint/ban-types': 'off',// 不允许对初始化为数字、字符串或布尔值的变量或参数进行显式返回类型声明'@typescript-eslint/explicit-function-return-type': 'off',// 不允许在 import 语句中使用 require 语句'@typescript-eslint/no-var-requires': 'off',// 禁止空函数'@typescript-eslint/no-empty-function': 'off',// 禁止在变量定义之前使用它们'@typescript-eslint/no-use-before-define': 'off',// 禁止 @ts-<directive> 注释代码'@typescript-eslint/ban-ts-comment': 'off',// 不允许使用后缀运算符的非空断言(!)'@typescript-eslint/no-non-null-assertion': 'off',// 要求导出函数和类的公共类方法的显式返回和参数类型'@typescript-eslint/explicit-module-boundary-types': 'off',// 使用顶层 type 限定符进行导入'@typescript-eslint/no-import-type-side-effects': 'error',// 不允许在可选链表达式后使用非空断言'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',// 禁止定义未使用的变量'@typescript-eslint/no-unused-vars': ['warn',{argsIgnorePattern: '^_',varsIgnorePattern: '^_'}],// 允许在导入上指定 type 关键字'@typescript-eslint/consistent-type-imports': ['error',{disallowTypeAnnotations: false,fixStyle: 'inline-type-imports'}],// 允许枚举成员的值是多种不同类型的有效 js 表达式'@typescript-eslint/prefer-literal-enum-member': ['error',{allowBitwiseExpressions: true}]}},{files: ['*.d.ts'],rules: {'eslint-comments/no-unlimited-disable': 'off','import/no-duplicates': 'off','unused-imports/no-unused-vars': 'off'}},{files: ['*.?([cm])js'],rules: {'@typescript-eslint/no-require-imports': 'off','@typescript-eslint/no-var-requires': 'off'}}
])// export default {
// root: true,
// env: {
// browser: true,
// node: true,
// es6: true
// },
// settings: {
// react: {
// version: 'detect'
// }
// },
// // 指定如何解析语法
// parser: '@typescript-eslint/parser',
// // 优先级低于 parse 的语法解析配置
// parserOptions: {
// ecmaVersion: 7,
// sourceType: 'module',
// jsxPragma: 'React',
// ecmaFeatures: {
// jsx: true
// }
// },
// plugins: ['react', '@typescript-eslint', 'react-hooks', 'prettier'],
// // 继承某些已有的规则
// extends: [
// 'eslint:recommended',
// 'plugin:react/recommended',
// 'plugin:@typescript-eslint/recommended',
// 'plugin:react/jsx-runtime',
// 'plugin:react-hooks/recommended',
// 'prettier',
// 'plugin:prettier/recommended'
// ],
// /*
// * 'off' 或 0 ==> 关闭规则
// * 'warn' 或 1 ==> 规则提示为警告(不影响代码执行)
// * 'error' 或 2 ==> 规则提示为错误(代码不能执行,界面报错)
// */
// rules: {
// /*
// * Eslint规则配置
// * 配置文档: https://eslint.nodejs.cn/docs/latest/rules/
// */
// // 需要 let 或 const 而不是 var
// 'no-var': 'error',
// // 禁止在定义变量之前使用变量
// 'no-use-before-define': 'off',
// // 声明后永远不会重新分配的变量需要 const 声明
// 'prefer-const': 'error',
// // 禁止不规则空格
// 'no-irregular-whitespace': 'off',
// // 禁止使用 debugger
// 'no-debugger': 'off',
// // 禁止未使用的变量
// 'no-unused-vars': [
// 'error',
// {
// argsIgnorePattern: '^_',
// varsIgnorePattern: '^_'
// }
// ],
// // 使用 prettier 插件
// 'prettier/prettier': [
// 'error',
// {
// endOfLine: 'auto'
// }
// ],// /*
// * TypeScript规则配置
// * 配置文档: https://typescript-eslint.nodejs.cn/rules/)
// */
// // 根据参数、属性和变量的默认值或初始值推断其类型
// '@typescript-eslint/no-inferrable-types': 'off',
// // 禁止使用自定义 ts 模块和命名空间
// '@typescript-eslint/no-namespace': 'off',
// // 禁止使用 any 类型
// '@typescript-eslint/no-explicit-any': 'off',
// // 禁止使用特定类型
// '@typescript-eslint/ban-types': 'off',
// // 不允许对初始化为数字、字符串或布尔值的变量或参数进行显式返回类型声明
// '@typescript-eslint/explicit-function-return-type': 'off',
// // 不允许在 import 语句中使用 require 语句
// '@typescript-eslint/no-var-requires': 'off',
// // 禁止空函数
// '@typescript-eslint/no-empty-function': 'off',
// // 禁止在变量定义之前使用它们
// '@typescript-eslint/no-use-before-define': 'off',
// // 禁止 @ts-<directive> 注释代码
// '@typescript-eslint/ban-ts-comment': 'off',
// // 不允许使用后缀运算符的非空断言(!)
// '@typescript-eslint/no-non-null-assertion': 'off',
// // 要求导出函数和类的公共类方法的显式返回和参数类型
// '@typescript-eslint/explicit-module-boundary-types': 'off',
// // 使用顶层 type 限定符进行导入
// '@typescript-eslint/no-import-type-side-effects': 'error',
// // 禁止定义未使用的变量
// '@typescript-eslint/no-unused-vars': [
// 'error',
// {
// argsIgnorePattern: '^_',
// varsIgnorePattern: '^_'
// }
// ],
// // 允许在导入上指定 type 关键字
// '@typescript-eslint/consistent-type-imports': [
// 'error',
// {
// disallowTypeAnnotations: false,
// fixStyle: 'inline-type-imports'
// }
// ],
// // 允许枚举成员的值是多种不同类型的有效 js 表达式
// '@typescript-eslint/prefer-literal-enum-member': [
// 'error',
// {
// allowBitwiseExpressions: true
// }
// ],// 'react-hooks/rules-of-hooks': 'off',
// 'react-hooks/exhaustive-deps': 'off'
// }
// }
.eslintignore配置--用于指定 ESLint 应该忽略不进行 lint 检查的文件或目录
.vscode
.idea
.husky
.local/public
/docs
/src/assets
dist
node_modules
pnpm-lock.yaml
Dockerfileeslint.config.js
postcss.config.js
prettier.config.js
commitlint.config.js*.md
*.woff
*.ttf
2.2.1、prettier
用到的插件:
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.1",
"prettier": "^3.1.0",
prettier.config.js配置文件
// 配置文档: https://prettier.nodejs.cn//** @type {import('prettier').Config} */
export default {// 每行最大宽度,超过换行printWidth: 120,// 缩进级别的空格数tabWidth: 2,// 用制表符而不是空格缩进行useTabs: false,// 语句末尾用分号semi: false,// 使用单引号而不是双引号singleQuote: true,// 在 JSX 中使用单引号而不是双引号jsxSingleQuote: true,// 尾随逗号trailingComma: 'none',// 对象字面量中括号之间有空格 { foo: bar }bracketSpacing: true,// 将多行 HTML(HTML、JSX)元素的 > 放在最后一行的末尾,而不是单独放在下一行bracketSameLine: false,// 在唯一的箭头函数参数周围包含括号(avoid:省略括号, always:不省略括号)arrowParens: 'avoid',// 换行符使用 lf 结尾 可选值 auto|lf|crlf|crendOfLine: 'lf'
}
.prettierignore配置文件
/dist/*
/public/*
/node_modules/**.local
**/*.svgeslint.config.js
postcss.config.js
prettier.config.js
commitlint.config.js
2.3、husky
作为提交的代码检测工具
配置如下:
执行文件:
"prepare": "husky install"
安装包:
"husky": "^8.0.3",
安装过后执行prepare就行了,会生成husky文件。
3、开发配置
3.1、axios二次封装
/utils/axios
import type { InternalAxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
import axios from 'axios'
import { message } from 'antd'
import { getToken, clearAuthCache } from '@/utils/auth'// Create axios instance
const service = axios.create({baseURL: '/api',timeout: 10 * 1000
})// Handle Error
const handleError = (error: AxiosError): Promise<AxiosError> => {if (error.response?.status === 401 || error.response?.status === 504) {//登录失效,这里自己处理clearAuthCache()location.href = '/login'}message.error(error.message || 'error')return Promise.reject(error)
}// Request interceptors configuration
service.interceptors.request.use((config: InternalAxiosRequestConfig) => {const token = getToken()if (token) {;(config as Recordable).headers['Authorization'] = `${token}`};(config as Recordable).headers['Content-Type'] = 'application/json'return config
}, handleError)// Respose interceptors configuration
service.interceptors.response.use((response: AxiosResponse) => {const data = response.dataif (data.code === 0) {return data.data} else {message.error(data.message)return Promise.reject('error')}
}, handleError)export { service }
3.2、包安装
根据项目而定,需要什么包可以提前规划好,初始化项目
3.3、配置所需要挂载的包
在main里面:
import React from 'react'
import ReactDOM from 'react-dom/client'
import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
import { store, persistor } from './stores'
import App from './App'
import '@/design/index.less'// register svg icon
import 'virtual:svg-icons-register'ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(<React.StrictMode><Provider store={store}><PersistGate persistor={persistor}><App /></PersistGate></Provider></React.StrictMode>
)
3.4、配置env
这里配置的env,还有.env.development、.env.production都可以配置,根据需要而定。
.env
VITE_GLOB_APP_TITLE = 'react-admin-design'VITE_PORT = 8203VITE_BUILD_GZIP = falseVITE_DROP_CONSOLE = true
3.5、mook配置
安装mookjs
一个是mock数据的,一个是挂载vite的
"mockjs": "^1.1.0","vite-plugin-mock": "2.9.8",
在vite的plugins里面添加如下:
里面包含mock路径,一般跟src同级
viteMockServe({mockPath: 'mock',ignore: /^_/,localEnabled: !isBuild,prodEnabled: isBuild,injectCode: `import { setupProdMockServer } from 'mock/_createProductionServer';setupProdMockServer()`})
具体的使用去仓库看:https://github.com/goodkets/react-admin-design
大概配置就是这样,还有很多大项目的配置肯定不止如此,比如多语言、测试工具、打包优化、包管理限制等啥的,我这里只用到了基本项目的配置。
相关文章:
vite项目构建配置
1、用vite搭建项目 使用npm create vitelatest构建项目,配置项选项react->tsSWC即可。 让后打开项目npm i。 2、项目配置 2.1、vite配置 主要是配置用到的插件(plugins--比如:svg、mock等)、路径、环境变量的使用、打包、…...
Java 反射机制与Spring框架的那点事
Java 反射机制是 Java 语言提供的一种能力,允许程序在运行时查询、访问和修改它自己的结构和行为。反射机制非常有用,但同时也需要谨慎使用,因为它可能会带来性能开销和安全风险。 以下是 Java 反射机制的一些关键概念和用法: Cl…...
计算机网络面试题3
四次挥手 断开连接需要四次挥手 1.客户端发送一个FIN(SEQx)标志的数据包到服务端,用来关闭客户端到服务端的数据传送, 然后客户端进入FIN-WAIT-1状态。 2.服务端收到一个FIN(SEQx)标志的数据包,它…...
day54|110.字符串接龙, 105.有向图的完全可达性, 106.岛屿的周长
110.字符串接龙 110. 字符串接龙 (kamacoder.com) #include<iostream> #include<vector> #include<unordered_set> #include<unordered_map> #include<string> #include<queue>using namespace std;int main(){int n 0;cin >> n;…...

使用docker在CentOS 7上安装php+mysql+nginx环境教程并运行WordPress
文章目录 一、安装docker1、切换yum源并更新系统2、卸载旧版docker3、配置Docker的yum库4、安装Docker5、启动和校验Docker6、配置镜像加速6.1、注册阿里云账号6.2、开通镜像服务6.3、配置镜像加速二、部署php+mysql+nginx环境1、准备目录结构2、拉取镜像3、运行容器并从中拷贝…...

vite tsx项目的element plus集成 - 按需引入踩坑
前面我们进行了开源组件的自研,很多组件可直接用现成的开源组件库,并不需要自己重复造轮子,为此我们讲如何在当前vite vitepress tsx技术整合的项目中实现element plus组件的按需引入,同时解决遇到的一些坑。 安装Element Plus…...

Android GreenDao 升级 保留旧表数据
Android GreenDao 升级 保留旧表数据 大川的川关注IP属地: 北京 0.2052019.08.05 11:54:36字数 270阅读 363 瓦力和伊娃 GreenDao升级库版本号之后,以前的旧数据没有了,为啥,因为GreenDao在升级的时候会删除旧库,创建新库&#…...

记一次证书站有趣的SQL注入
一、确定站点 按照以前文章中提到的寻找可进站测试的思路,找到了某证书站的一处站点,通告栏中写明了初始密码的结构,因此我们可通过信息搜集进入该站点(可以考虑去搜集比较老的学号,因为这样的账号要么被冻结,要么就是…...

1_初识pytorch
之前完全没有了解过深度学习和pytorch,但现在因为某些原因不得不学了。不得不感叹,深度学习是真的火啊。纯小白,有错的欢迎指正~ 参考视频:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆…...
c++typeid()的使用
用处: typeid()函数主要用来获取对应类型或者变量的类型信息,其返回一个std::type_info的对象,这个对象中存放了对应类型的具体信息。 所以typeid()函数就是获取一个type_info的类型,然后可以通过此类型来获取到相应的类型信息。 type_info的…...

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十四)-租云服务器及配环境、docker基本命令
主要介绍了租云服务器和docker配置、基本命令!!! 文章目录 前言 一、云平台 二、租云服务器及安装docker 1.阿里云 2.安装docker 三、docker命令 将当前用户添加到docker用户组 镜像(images) 容器(container) 四、实战…...
实现一个全栈模糊搜索匹配的功能
提供一个全栈实现的方案,包括 Vue 3 前端、Express 后端和 MySQL 数据库的分类模糊搜索功能。让我们逐步来看: 1. 数据库设计 (MySQL) 首先,我们需要一个存储分类的表: CREATE TABLE categories (id INT AUTO_INCREMENT PRIMAR…...
智慧景区导览系统小程序开发
智慧景区导览系统小程序的开发是一个综合性的过程,旨在通过先进的技术手段提升游客的游览体验。以下是开发智慧景区导览系统小程序的主要步骤和关键点: 一、需求分析 市场调研:了解旅游市场的最新趋势和游客的实际需求,包括游客…...
HIVE调优方式及原因
3.HIVE 调优: 需要调优的几个方面: 1.HIVE语句执行不了 2.HIVE查询语句,在集群中执行时,数据无法落地 HIVE执行时,一开始语句检查没有问题,生成了多个JOB, …...
deploy local llm ragflow
CPU > 4 cores RAM > 16 GB Disk > 50 GB Docker > 24.0.0 & Docker Compose > v2.26.1 下载docker: 官方下载方式:https://docs.docker.com/desktop/install/ubuntu/ 其中 DEB package需要手动下载并传输到服务器 国内下载方式&…...

测桃花运(算姻缘)的网站系统源码
简介: 站长安装本源码后只要有人在线测算,就可以获得收入哦。是目前市面上最火的变现利器。 本版本无后台,无数据。本版本为开发的逗号联盟接口版本。直接对接逗号联盟,修改ID就可以直接运营收费赚钱。 安装环境:PH…...
电商平台优惠券
优惠券业务逻辑 优惠券的发放: 来源:优惠券可以由平台统一发放,也可以由商家自行发放。平台优惠券的优惠由平台承担,而店铺优惠券则由商家承担。类型:优惠券可以分为满减优惠券、无门槛优惠券等,根据使用限…...

内衣洗衣机多维度测评对比,了解觉飞、希亦、鲸立哪款内衣洗衣机更好
想要代替手洗内衣物,那么一台内衣专用的小型洗衣机就必不可少啦,不仅能够为我们节约更多的时间以及精力,还能大大提高内衣物的卫生,面对于市面上各种各样的小型内衣洗衣机,相信很多小伙伴都无从下手! 为一…...

数据结构和算法入门
1.了解数据结构和算法 1.1 二分查找 二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半,然后比较目标值与中间元素的大小关系,从而确定应该在左半部分还是右半部分继续查找。这个…...

基于OpenCV C++的网络实时视频流传输——Windows下使用TCP/IP编程原理
1.TCP/IP编程 1.1 概念 IP 是英文 Internet Protocol (网络之间互连的协议)的缩写,也就是为计算机网络相互连接进行通信而设计的协议。任一系统,只要遵守 IP协议就可以与因特网互连互通。 所谓IP地址就是给每个遵循tcp/ip协议连…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...