ReactPress:用现代前端工具链开发WordPress主题的实践指南

news2026/5/4 6:55:35
1. 项目概述当WordPress遇见React如果你和我一样常年混迹在Web开发的前后端那你一定对WordPress和React这两个名字不陌生。WordPress这个占据了全球超过四成网站市场的“老大哥”以其强大的内容管理能力和海量的主题插件生态让无数非技术出身的用户也能轻松搭建自己的网站。而React作为现代前端开发的代名词以其组件化、声明式的开发范式彻底改变了我们构建用户界面的方式。但这两个世界长久以来似乎有些“隔阂”。传统的WordPress主题开发依然围绕着PHP模板、the_loop()和一堆钩子函数打转。你想在WordPress里用上React的丝滑交互和组件复用常规做法要么是做个“Headless WordPress”用REST API或GraphQL把数据喂给一个独立的前端应用要么就是在主题里零星地用wp_enqueue_script引入一些React小部件管理起来颇为麻烦。直到我遇到了fecommunity/reactpress这个项目。它不是一个框架也不是一个完整的主题而是一个精巧的“桥梁”或者说“构建工具链”。它的核心目标非常明确让你能够像开发一个标准的React应用一样去开发一个完整的WordPress主题或插件并且能无缝集成WordPress的核心功能如菜单、小工具、文章数据等。简单来说它让你能用create-react-app或类似现代前端工具链的开发体验去产出直接运行在WordPress环境里的主题。你写的是JSX用的是Hooks享受的是热更新但最终生成的是一个标准的、包含style.css和index.php的WordPress主题包。这对于那些熟悉React但不想深究PHP模板语法却又需要利用WordPress成熟后台和生态的开发者来说无疑打开了一扇新的大门。2. 核心设计思路与方案选型2.1 核心问题弥合两种开发范式的鸿沟要理解reactpress的价值得先看清它要解决的根本矛盾。传统WordPress主题开发是“服务器端渲染优先”PHP在服务器端生成完整的HTML送达浏览器。而现代React应用是“客户端渲染优先”浏览器拿到一个几乎空的HTML壳和一个巨大的JS包然后由JS来动态渲染内容。这两种模式在数据获取、路由、SEO等方面有着天壤之别。reactpress没有选择非此即彼的激进方案它走的是“渐进式”和“集成式”的路线。其设计思路可以概括为以下几点构建时融合在开发阶段你使用完整的前端工具链如Webpack Babel开发React应用。在构建阶段reactpress的脚本会介入将构建产物JS、CSS、静态资源进行特殊处理并生成WordPress主题所需的PHP模板文件。这些PHP文件不再是复杂的逻辑文件而更像是“入口”或“控制器”主要负责引入React应用的根脚本和样式并将必要的WordPress数据如站点标题、菜单、文章列表以全局变量或内联脚本的方式“注入”到页面中供React应用消费。运行时混合在浏览器中React应用正常启动并挂载。但它不是在一个真空中运行它可以通过window对象或特定的上下文Context获取到从WordPress PHP端“注入”的初始数据。对于后续的交互比如加载更多文章React应用可以通过Fetch或Axios调用WordPress的REST API来获取数据实现动态更新。这本质上是一种“混合渲染”Hybrid Rendering或“部分 hydration”的思路。开发体验统一开发者无需在PHP文件和JS文件之间频繁切换上下文。绝大部分UI和交互逻辑都在React组件中完成享受组件化、状态管理和热更新的现代开发体验。只有涉及到与WordPress核心深度集成或必须由服务器端处理的任务时才需要接触少量的PHP代码。2.2 技术方案选型为什么是Webpack与自定义插件reactpress的底层依赖于现代前端构建体系尤其是Webpack。这是经过深思熟虑的选择生态与成熟度Webpack是前端构建的事实标准其插件系统极其强大允许在构建生命周期的各个节点进行干预。reactpress的核心就是一个或一系列自定义的Webpack插件。资源处理能力一个WordPress主题不仅需要JS还需要处理CSS可能是Sass/Less、图片、字体等静态资源。Webpack原生支持这些资源的加载、转换和优化如压缩、代码分割这为生成高性能主题打下了基础。可扩展性通过Webpack配置开发者可以轻松集成TypeScript、ESLint、Prettier、测试工具等保持与主流React技术栈同步。除了Webpack项目也可能选择与Vite等新兴构建工具集成以追求更快的开发服务器启动和热更新速度。但核心思想不变利用构建工具的能力将React源码编译、打包并“翻译”成WordPress能识别的主题结构。注意这种方案并非没有代价。它引入了一定的构建复杂度对开发者的前端工程化能力有要求。同时生成的主题在首次加载时可能因为需要下载较大的JS包而带来一定的性能开销这就需要开发者善用代码分割、懒加载等优化手段。3. 环境准备与项目初始化实操3.1 基础环境要求在开始之前确保你的本地开发环境满足以下条件Node.js建议使用最新的LTS版本如18.x或20.x。这是运行前端构建工具的基础。npm / yarn / pnpm任选其一作为包管理器。我个人目前更倾向于pnpm速度更快磁盘空间利用更高效。本地WordPress环境你需要一个本地运行的WordPress站点用于开发和测试。推荐使用Local by Flywheel、Docker配合wordpress官方镜像或MAMP/XAMPP。这比直接在远程服务器上调试要高效安全得多。代码编辑器VS Code是绝佳选择配合相应的React和PHP插件。3.2 初始化一个ReactPress项目reactpress项目通常提供两种初始化方式使用官方脚手架工具或手动集成到现有项目中。方式一使用脚手架推荐如果项目提供了类似create-reactpress-app的脚手架那将是最快的方式。假设有这样一个工具操作如下# 假设命令为 create-reactpress-app npx create-reactpress-app my-wp-theme cd my-wp-theme npm install这个命令会创建一个预设好所有配置的项目骨架包括基本的Webpack配置、示例组件、以及关键的functions.php和模板PHP文件。方式二手动集成到现有React项目如果你的团队已有成熟的React项目结构或者你想从零开始精细控制可以手动集成。创建React应用使用Vite或Webpack自行搭建一个React项目。这里以Vite为例因其速度npm create vitelatest my-wp-theme -- --template react cd my-wp-theme npm install安装reactpress核心包你需要安装reactpress提供的npm包它通常包含Webpack插件和构建脚本。npm install fecommunity/reactpress --save-dev # 或者如果它是一组包 npm install reactpress-webpack-plugin reactpress-cli --save-dev配置构建工具这是最关键的一步。你需要修改vite.config.js或webpack.config.js。对于Webpack在配置文件中引入ReactPressWebpackPlugin并在plugins数组中实例化它。这个插件会在构建完成后执行生成PHP模板、复制资源、注入数据等操作。// webpack.config.js 示例片段 const ReactPressWebpackPlugin require(reactpress-webpack-plugin); module.exports { // ... 其他配置入口、输出等 output: { path: path.resolve(__dirname, dist), // 输出到dist目录 filename: [name].[contenthash].js, }, plugins: [ new ReactPressWebpackPlugin({ themeName: MyReactTheme, outputPath: ./wordpress-theme, // 指定WordPress主题输出路径 phpTemplatePath: ./templates, // 自定义PHP模板所在目录 // 其他配置项如是否生成style.css是否注入初始数据等 }), // ... 其他插件 ], };对于Vite可能需要使用Vite的插件API或构建钩子来实现类似功能或者reactpress社区提供了专门的Vite插件。创建PHP模板文件在项目根目录创建templates文件夹里面放置基础的PHP模板文件如index.php,header.php,footer.php,single.php,page.php等。这些文件内容会非常精简主要就是引入构建生成的JS和CSS并输出初始数据。!-- templates/index.php 示例 -- !DOCTYPE html html ?php language_attributes(); ? head meta charset?php bloginfo( charset ); ? meta nameviewport contentwidthdevice-width, initial-scale1 ?php wp_head(); ? !-- 这里会由插件自动替换为构建产物的CSS链接 -- /head body ?php body_class(); ? ?php wp_body_open(); ? div idroot/div !-- React应用挂载点 -- ?php // 将WordPress数据传递给前端JS $initial_state [ siteTitle get_bloginfo(name), menu wp_get_nav_menu_items(primary), // ... 其他数据 ]; ? script window.__INITIAL_STATE__ ?php echo json_encode($initial_state); ?; /script ?php wp_footer(); ? !-- 这里会由插件自动替换为构建产物的JS脚本 -- /body /html配置package.json脚本{ scripts: { dev: vite, // 或 webpack serve -- 用于开发热更新 build: vite build, // 或 webpack -- 构建并触发reactpress插件生成主题 build:theme: npm run build reactpress-cli generate, // 可能有的单独生成主题命令 deploy: npm run build rsync -avz ./wordpress-theme/ userserver:/path/to/wp-content/themes/my-theme/ } }3.3 连接本地WordPress将构建输出的主题文件夹如./wordpress-theme复制或软链接到你的本地WordPress安装目录下的wp-content/themes/文件夹中。登录WordPress后台在“外观”-“主题”中找到并启用你新生成的主题。访问你的本地站点首页应该就能看到React应用渲染的内容了。打开浏览器开发者工具在“网络”标签页中确认JS和CSS文件是否正确加载在“控制台”查看window.__INITIAL_STATE__是否存在且数据正确。4. 核心开发流程与WordPress集成详解4.1 组件化开发与路由处理在reactpress项目中你开发React组件的方式与普通React应用无异。你可以使用函数组件、HooksuseState,useEffect,useContext、状态管理库Zustand, Redux Toolkit等。路由是一个需要特殊处理的点。在单页应用SPA中我们使用react-router-dom来管理客户端路由。但在WordPress中页面Page、文章Post、分类Category都有自己固定的URL结构并且可能被搜索引擎索引。reactpress通常采用一种“混合路由”策略初始加载用户访问一个具体的WordPress URL如/about/或/2024/05/hello-world/。服务器端PHP模板根据URL决定使用哪个模板page.php或single.php并注入该页面对应的初始数据如文章ID、内容。客户端导航一旦React应用在浏览器中加载完毕对于站点内的导航比如点击一个由React渲染的导航菜单链接可以拦截点击事件使用react-router-dom进行客户端的无刷新页面切换并通过WordPress REST API异步获取新页面的数据来更新视图。这能提供更快的导航体验。回退与SEO需要确保浏览器地址栏的URL与客户端路由状态同步使用BrowserRouter并处理好直接访问深层客户端路由的情况。对于SEO关键页面最好还是依赖服务器端渲染的初始HTML。一种常见的实践是在React应用入口处根据window.__INITIAL_STATE__中的当前页面类型和ID来设置客户端路由的初始状态。4.2 获取与消费WordPress数据数据流是集成的核心。数据来源主要有两个构建时/服务器端注入的初始数据和运行时的API调用。1. 初始数据注入如前文index.php示例所示在PHP模板中我们通过window.__INITIAL_STATE__将数据传递给前端。在React应用中你可以在根组件或一个专门的Context中读取这个全局变量作为应用的初始状态。// src/App.jsx import { useEffect } from react; import { useAppStore } from ./store; // 假设使用Zustand function App() { const initializeStore useAppStore(state state.initialize); useEffect(() { if (window.__INITIAL_STATE__) { initializeStore(window.__INITIAL_STATE__); } }, [initializeStore]); // ... 应用其他部分 }2. 运行时API调用对于分页加载、搜索、提交评论等动态交互需要调用WordPress REST API。// src/api/wordpress.js import axios from axios; const wpApi axios.create({ baseURL: /wp-json/wp/v2, // 相对路径指向当前站点的API }); export const getPosts (params {}) wpApi.get(/posts, { params }); export const getPage (id) wpApi.get(/pages/${id}); export const createComment (postId, data) wpApi.post(/comments?post${postId}, data); // 在组件中使用 import { getPosts } from ./api/wordpress; import { useQuery } from tanstack/react-query; // 推荐使用React Query管理服务器状态 function PostList() { const { data: posts, isLoading } useQuery({ queryKey: [posts], queryFn: () getPosts({ per_page: 10 }), }); if (isLoading) return divLoading.../div; return ( ul {posts?.map(post ( li key{post.id}{post.title.rendered}/li ))} /ul ); }3. 使用更高效的GraphQL如果你觉得REST API不够灵活或存在多次请求的问题可以考虑集成WPGraphQL插件。它为WordPress提供了完整的GraphQL API。在前端你可以使用graphql-request或Apollo Client来查询数据实现更精确、更高效的数据获取。import { request } from graphql-request; const query query GetPosts($first: Int!) { posts(first: $first) { nodes { id title excerpt featuredImage { node { sourceUrl } } } } } ; request(https://yoursite.com/graphql, query, { first: 5 }).then((data) console.log(data));4.3 样式管理与主题化在React组件中你可以使用任何你喜欢的样式方案CSS Modules、Styled-Components、Tailwind CSS、Emotion等。构建工具Webpack/Vite会负责处理这些样式并将最终生成的CSS文件自动添加到WordPress主题的style.css中或者通过wp_enqueue_style在head里引入。需要特别注意WordPress主题的style.css文件头它包含了主题的元信息主题名称、作者、描述等。reactpress的构建插件通常会在生成主题时从一个指定的源文件如src/theme-style-header.css中读取这些信息并将其写入到最终的style.css文件顶部。/* src/theme-style-header.css */ /* Theme Name: My Awesome React Theme Theme URI: https://example.com/my-theme Author: Your Name Author URI: https://example.com Description: A modern WordPress theme built with React. Version: 1.0.0 License: GPL v2 or later Text Domain: my-react-theme */集成WordPress自定义器Customizer或主题选项 为了让用户能在后台修改一些颜色、字体等样式你需要将React中的样式变量与WordPress的定制功能连接起来。这通常需要在主题的functions.php中使用add_theme_support和wp_customizeAPI注册设置。将这些设置的值通过wp_add_inline_style或再次通过window.__INITIAL_STATE__注入到前端。在React应用中使用Context或状态管理来消费这些动态值并应用到组件样式中。这比纯静态主题要复杂但提供了更好的可定制性。5. 构建、部署与性能优化实战5.1 开发与构建流程开发模式运行npm run dev。这会启动一个开发服务器如Vite或Webpack Dev Server提供热模块替换HMR功能。但是你需要配置开发服务器的代理将对于WordPress页面如/wp-admin/或API请求/wp-json/的请求代理到你的本地WordPress服务器如http://localhost:8080。这样你才能在React开发环境中看到真实的WordPress数据和页面结构。// vite.config.js 开发服务器代理配置 export default defineConfig({ server: { proxy: { /wp-json: http://localhost:8080, /wp-admin: http://localhost:8080, // 可能还需要代理其他WordPress路径 }, }, });生产构建运行npm run build。这个过程会编译、压缩、代码分割你的React应用和样式。根据模板生成所有必要的PHP文件index.php,single.php,header.php,functions.php等。将处理后的JS、CSS、图片等资源复制到主题文件夹的正确位置如/assets/。生成或更新style.css文件头。最终产出一个完整的、标准的WordPress主题文件夹。5.2 部署到生产环境部署就是将构建生成的主题文件夹上传到服务器的WordPress主题目录。手动部署使用FTP/SFTP工具如FileZilla, Transmit或通过SSH命令行scp,rsync将./wordpress-theme整个目录上传到服务器/var/www/html/wp-content/themes/路径根据实际情况调整下。自动化部署可以将部署脚本集成到CI/CD管道如GitHub Actions, GitLab CI中。在代码推送到特定分支如main后自动触发构建并通过SSH或FTP将主题同步到生产服务器。# GitHub Actions 示例片段 - name: Deploy to Production uses: easingthemes/ssh-deploymain with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} remote-host: ${{ secrets.HOST }} remote-user: ${{ secrets.USERNAME }} source: ./wordpress-theme/ target: /var/www/example.com/wp-content/themes/my-react-theme/5.3 性能优化关键点用React开发WordPress主题性能是需要重点关注的问题尤其是首屏加载时间。代码分割与懒加载利用Webpack的动态import()语法或React.lazy()将你的应用按路由或组件拆分成多个块chunk。这样用户首次访问只需要加载核心代码其他部分按需加载。// 使用React.lazy和Suspense进行路由懒加载 import { lazy, Suspense } from react; import { BrowserRouter as Router, Routes, Route } from react-router-dom; const HomePage lazy(() import(./pages/HomePage)); const AboutPage lazy(() import(./pages/AboutPage)); function App() { return ( Router Suspense fallback{divLoading page.../div} Routes Route path/ element{HomePage /} / Route path/about element{AboutPage /} / /Routes /Suspense /Router ); }图片优化使用Webpack的image-webpack-loader或Vite的vite-plugin-imagemin在构建时自动压缩图片。对于WordPress媒体库中的图片可以考虑使用像Cloudinary这样的第三方服务进行动态优化和CDN分发或者在主题中集成懒加载库如lazysizes。利用浏览器缓存确保你的Web服务器如Nginx为静态资源JS、CSS、图片设置了正确的缓存头Cache-Control,Expires。对于哈希命名的文件如main.abc123.js可以设置很长时间的缓存。减少初始状态数据量注入到window.__INITIAL_STATE__的数据要精简只包含首屏渲染必需的数据。避免将整个文章内容或庞大的菜单结构全部塞进去。考虑服务端渲染SSR或静态站点生成SSG这是进阶优化。对于SEO和首屏速度要求极高的页面可以考虑在Node.js服务器上运行React来执行服务端渲染或者使用像Next.js这样的框架但这就需要更复杂的架构可能脱离了reactpress“简单集成”的初衷。一个折中方案是对少数关键页面首页、文章页预渲染成静态HTML这可以通过构建脚本实现。6. 常见问题、调试技巧与避坑指南在实际使用reactpress或类似方案的过程中我踩过不少坑这里总结一些典型问题和解决方法。6.1 开发环境问题问题热更新HMR不工作或者修改后页面完全刷新。排查检查开发服务器的代理配置是否正确确保对静态资源和非API请求的代理规则没有冲突。确认Webpack/Vite的HMR配置已启用。技巧在Vite中确保index.html中正确的script typemodule入口。有时需要配置server.hmr选项为{ overlay: false }以避免与WordPress的某些脚本冲突。问题开发时访问页面显示“白屏”或控制台有跨域CORS错误。原因React开发服务器运行在localhost:3000而WordPress API在localhost:8080浏览器因同源策略阻止了请求。解决确保开发服务器的代理配置正确如前文所示。另外可以在WordPress的wp-config.php中添加以下代码来允许跨域请求仅限开发环境// 在wp-config.php中 if (defined(WP_ENV) WP_ENV development) { header(Access-Control-Allow-Origin: http://localhost:3000); header(Access-Control-Allow-Credentials: true); header(Access-Control-Allow-Methods: GET, POST, OPTIONS); header(Access-Control-Allow-Headers: Content-Type, Authorization); }6.2 构建与部署问题问题构建后主题在WordPress中激活但页面空白控制台报JS/CSS 404错误。排查检查构建输出的主题文件夹结构是否正确JS/CSS文件是否存在于预期的/assets/目录下。查看生成的PHP文件如header.php其中引入资源的路径是否正确。路径应该是相对于主题根目录的通常使用get_template_directory_uri()函数来获取主题的URL。检查服务器权限确保Web服务器如www-data用户有权限读取主题目录下的文件。实操心得绝对不要在资源路径中使用绝对路径或依赖于开发环境的路径。始终使用WordPress提供的函数如get_template_directory_uri()和get_stylesheet_directory_uri()。reactpress的插件应该会自动处理这一点但需要检查其配置。问题生产环境更新主题后浏览器加载的仍然是旧的JS/CSS文件。原因浏览器缓存了旧版本的文件。解决构建哈希确保Webpack/Vite配置中输出文件名使用了[contenthash]如main.[contenthash:8].js。文件内容一变哈希值就变URL就不同强制浏览器下载新文件。清除缓存插件在WordPress后台使用缓存插件如W3 Total Cache, WP Rocket时构建后需要手动清除其缓存或者配置其自动检测文件变化。服务器缓存清除CDN或对象存储如S3的缓存。6.3 WordPress集成问题问题WordPress菜单、小工具区域无法在React前端中显示。解决你需要在PHP模板中使用WordPress函数如wp_nav_menu(),dynamic_sidebar()将菜单和小工具的初始HTML结构渲染出来并注入其配置数据到window.__INITIAL_STATE__。然后在React端你需要编写组件来“接管”这些已有的DOM元素或者根据注入的数据重新渲染它们。直接在前端动态调用wp_nav_menu()是不可能的。技巧对于菜单一种更“React化”的方式是在PHP端只注入菜单结构数据通过wp_get_nav_menu_items获取然后在React端完全用ul和li组件重新渲染导航。这样你可以获得完全的控制权方便添加交互效果。问题文章内容中的短代码Shortcode和古腾堡Gutenberg块无法正确渲染。原因短代码和古腾堡块的渲染是WordPress的服务器端功能。当你通过REST API获取文章内容时默认得到的是原始内容或经过部分处理的rendered字段但某些复杂的短代码和动态块可能无法在前端直接解析。解决对于短代码可以考虑在前端引入一个轻量级的短代码解析库或者将关键的短代码输出也通过API注入。对于古腾堡块最稳妥的方式是仍然使用WordPress的the_content()函数在服务器端渲染好整个文章内容HTML然后将其作为一个字符串注入到初始状态中在React组件中使用dangerouslySetInnerHTML来显示。但这会失去用React组件来渲染每个块的灵活性。折中方案是只对标准块段落、标题、图片等进行前端解析对复杂块采用服务器端渲染。6.4 性能与SEO问题问题Google搜索控制台报告“已抓取当前未编入索引”或首屏加载速度评分低。排查与优化检查初始HTML禁用JavaScript直接访问你的页面。如果页面是空白的只有一个div idroot/div那么对于搜索引擎爬虫来说你的页面就是空的。这就是客户端渲染CSR的最大SEO弊端。解决方案关键内容服务器端渲染对于文章标题、元描述、首段内容等关键SEO信息尽量在PHP模板中直接输出而不是完全依赖JS填充。使用预渲染插件考虑集成像react-snap这样的静态预渲染工具它在构建后会用无头浏览器访问你的路由将页面快照保存为静态HTML文件。然后修改服务器配置让爬虫访问这些静态HTML。考虑SSR/SSG如果SEO至关重要评估引入Next.js等框架进行服务端渲染的可行性但这会大大增加架构复杂度。性能工具使用Lighthouse、WebPageTest等工具进行分析。重点关注“最大内容绘制LCP”、“首次输入延迟FID”。优化措施包括压缩JS/CSS、优化图片、使用更快的CDN、实施懒加载、减少第三方脚本。最后一点个人体会reactpress这类方案非常适合开发管理后台、Web应用类型的WordPress站点或者对前端交互体验要求高、但对传统SEO依赖不强的项目如公司内部仪表盘、会员平台。对于内容驱动、严重依赖搜索引擎流量的博客或新闻站需要非常谨慎地评估其SEO方案或者只将其用于站点的非核心部分。它是一把强大的瑞士军刀但选择用它之前一定要想清楚你的项目最主要的“敌人”是谁——是开发效率是用户体验还是搜索引擎想清楚了才能用得游刃有余。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2580852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…