当前位置: 首页 > article >正文

Tauri 2.0 + Next.js 16 桌面应用开发模板全解析

1. 项目概述与核心价值如果你正在寻找一个能快速启动桌面应用开发的现代技术栈模板那么kvnxiao/tauri-nextjs-template绝对值得你花时间研究。这个模板将两个看似不同领域的技术——用于构建现代Web前端的Next.js和用于创建跨平台桌面应用的Tauri——巧妙地结合在了一起。我最初接触这个组合时也心存疑虑用Next.js这种功能强大的全栈框架来做桌面应用的前端是不是有点“杀鸡用牛刀”但实际用下来尤其是在需要复杂UI交互、状态管理和快速原型验证的场景下它的优势就非常明显了。简单来说这个模板为你预设了一个基于Tauri 2.0和Next.js 16App Router的完整开发环境。Tauri负责用Rust构建一个轻量、安全的原生应用外壳并提供一个Webview来承载你的前端界面而Next.js则提供了React生态中最成熟、功能最丰富的开发体验包括基于文件的路由、服务端组件在SSG模式下有限制、一流的开发工具链等。对于熟悉React/Next.js生态但想涉足桌面应用开发的开发者或者希望用一套代码同时兼顾Web和桌面端的团队这个模板极大地降低了入门和整合的复杂度。它帮你处理了从项目初始化、构建配置到代码规范检查的所有脏活累活让你能立刻专注于业务逻辑的开发。2. 技术栈深度解析与选型考量2.1 为什么是 Tauri Next.js选择这个技术组合背后有几个核心的考量点这也是我推荐它给特定人群的原因。首先Tauri的优势在于其现代性和轻量级。相较于传统的ElectronTauri使用系统原生的Webview在Windows上是WebView2macOS上是WKWebViewLinux上是WebKitGTK这意味着最终的应用程序体积可以小得多内存占用也更低。它的后端使用Rust编写带来了卓越的性能和内存安全性。对于前端开发者来说Tauri的JavaScript/TypeScript API设计得非常友好通过简单的invoke调用就能与Rust后端进行安全的进程间通信IPC处理文件系统、系统托盘等原生功能。其次为什么选择Next.js而不是更轻量的Vite React这正是这个模板的“opinionated”之处。作者在README开头就直言对于大多数Tauri应用前端Next.js可能有些“过度设计”overkill并推荐了另一个更轻量的模板。然而Next.js带来的结构化约定和开箱即用的强大功能在特定场景下是无与伦比的。例如App Router与服务器组件虽然Tauri环境不支持服务端渲染SSR但Next.js的App Router模型提供了基于文件系统的、清晰的路由结构以及“默认服务端组件”的理念。这促使你更好地思考组件的职责划分哪些逻辑应该放在“服务端”在构建时执行哪些必须留在客户端。这种心智模型对构建可维护的大型应用很有帮助。强大的工具链与优化Next.js内置的图像优化、字体优化、脚本策略等功能虽然部分在静态导出时受限但其构建系统和开发服务器Dev Server的体验非常出色。热更新HMR快速可靠对于提升开发效率至关重要。生态与未来兼容性直接使用Next.js意味着你的前端部分可以无缝享受整个React和Next.js生态的最新进展。如果你的应用未来有推出Web版本的计划那么这套代码的迁移成本会极低。因此这个模板最适合那些已经熟悉Next.js且项目复杂度较高、需要Next.js提供的结构化能力和高级功能的团队。如果你只是做一个简单的工具类小应用或许更轻量的方案更合适。2.2 模板集成的核心工具链这个模板不仅仅是两个框架的简单拼接它还集成了一套现代、高效且观点鲜明的开发工具链这体现了作者对生产环境开发体验的深刻理解。包管理器PNPM模板默认使用pnpm。相比 npm 和 yarnpnpm 通过硬链接和符号链接在全局存储中管理依赖能显著节省磁盘空间并且安装速度通常更快。它严格的node_modules结构也能避免一些幽灵依赖phantom dependencies问题。对于同时管理前端Node.js和RustCargo依赖的项目保持依赖树的清晰和高效很重要。样式方案Tailwind CSS 4模板集成了最新的Tailwind CSS 4。这是一个实用优先utility-first的CSS框架允许你通过组合类名快速构建UI而无需编写自定义CSS。它与React组件模型配合得非常好能实现样式的局部作用域并且通过PurgeCSS或Tailwind自带的优化能确保最终打包的CSS文件只包含用到的样式非常精简。对于桌面应用来说保持前端资源的轻量化是Tauri哲学的一部分Tailwind CSS与此目标完美契合。代码质量工具Biome这是模板中一个非常关键且现代的选择。Biome是一个用Rust编写的前端工具链它集成了格式化Formatter、代码检查Linter和导入排序Import Sorter的功能旨在替代Prettier、ESLint和trivago/prettier-plugin-sort-imports等工具组合。它的最大优势是速度极快。在大型项目中运行ESLint和Prettier可能耗时数秒甚至数十秒而Biome通常在毫秒级别完成。模板已经预置了针对TypeScript和React的推荐配置确保了代码风格的一致性。Rust工具链Clippy Rustfmt对于Rust后端代码模板同样配置了标准的代码质量工具clippyRust的官方Linter和rustfmtRust的官方代码格式化工具。这保证了前后端代码都具备高标准的可读性和一致性。自动化检查GitHub Actions模板预置了GitHub Actions工作流在代码推送到仓库或发起拉取请求时会自动运行Biome格式检查、TypeScript类型检查以及Rust的cargo check和clippy检查。这为团队协作提供了自动化的质量守门员确保主分支的代码始终符合规范。这套工具链的选择反映了一个追求极致开发体验和代码质量的现代Web工程化思路。它减少了开发者在配置上的决策成本让团队能迅速进入高效、规范的协作状态。3. 项目初始化与开发环境搭建详解3.1 从零开始创建项目虽然你可以直接克隆原仓库但更标准的做法是使用Tauri官方的项目创建工具并指定模板。不过该模板目前可能未直接收录在Tauri的官方模板列表中。因此最直接的方式还是克隆git clone https://github.com/kvnxiao/tauri-nextjs-template.git my-tauri-app cd my-tauri-app接下来是关键的依赖安装步骤。模板强制使用pnpm所以你需要先确保全局安装了它npm install -g pnpm。然后在项目根目录运行pnpm install这个命令会安装所有前端的Node.js依赖。同时Tauri CLI 会作为开发依赖被安装。首次运行pnpm install时Tauri CLI 会自动检测并引导你安装构建Tauri应用所需的Rust工具链如rustc,cargo和系统依赖如WebView2运行时、Xcode Command Line Tools等。请务必跟随命令行提示完成这些系统级环境的配置这个过程可能需要一些时间并且可能需要管理员权限。注意在Windows上可能会提示你安装Microsoft Visual C 构建工具和WebView2 运行时。WebView2是必须的因为Tauri在Windows上依赖它来提供Webview组件。请确保这些依赖安装成功否则后续的tauri dev命令会失败。3.2 关键配置修改应用标识符项目初始化后有一项配置必须修改否则你将无法构建发布Release版本。打开src-tauri/tauri.conf.json文件找到identifier字段{ productName: tauri-nextjs-template, version: 0.1.0, // ... 其他配置 identifier: com.tauri.dev, // -- 默认是开发标识符 // ... 其他配置 }将com.tauri.dev修改为你自己应用的唯一标识符通常采用反向域名格式例如com.mycompany.myapp或io.github.yourusername.yourapp。这个标识符在操作系统级别用于区分你的应用如果使用默认值在尝试构建发布版本时会遇到错误。3.3 启动开发服务器配置完成后就可以启动开发了。在项目根目录运行pnpm tauri dev这个命令会同时做以下几件事启动 Next.js 开发服务器通常运行在http://localhost:3000。编译 Rust 后端代码src-tauri目录下的。启动一个原生的 Tauri 应用窗口并将窗口内的 Webview 指向http://localhost:3000。你会看到两个窗口一个是 Next.js 的开发服务器日志终端另一个就是你的桌面应用窗口。现在你可以像开发普通 Next.js 应用一样修改src/app下的 React 组件。Next.js 的热模块替换HMR会实时更新浏览器页面而 Tauri 窗口内的 Webview 也会同步刷新体验非常流畅。实操心得在开发过程中如果你需要调试 Tauri 窗口内的 JavaScript可以像在浏览器中一样打开开发者工具。在 Windows/Linux 上默认快捷键是CtrlShiftI在 macOS 上是CmdOptionI。这对于调用 Tauri API 或排查渲染问题非常有用。4. 核心开发模式与架构实践4.1 前端代码结构Next.js App Router模板的前端遵循 Next.js 16 的 App Router 约定。所有页面和路由相关的代码都位于src/app目录下。例如src/app/page.tsx对应的是应用的根路由/。你可以像构建任何 Next.js 应用一样在这里创建布局layout.tsx、页面page.tsx、加载状态loading.tsx、错误页面error.tsx以及服务端组件。然而最大的不同在于渲染模式。在 Tauri 环境中你的 Next.js 应用最终会通过静态导出Static Export的方式将页面预渲染为静态的 HTML、CSS 和 JavaScript 文件。这意味着不支持服务端渲染SSRgetServerSideProps、headers、cookies等动态服务端 API 在构建后无法使用因为运行时没有 Node.js 服务器。支持静态生成SSGgenerateStaticParams、在组件顶层使用fetch并缓存除非指定{ cache: no-store }是推荐的方式。这些数据会在构建时获取并固化到静态文件中。客户端组件是主力所有需要交互性、访问浏览器 API包括 Tauri API或使用状态如useState,useEffect的组件都必须在文件顶部添加use client指令声明为客户端组件。这种架构要求你在设计数据流和组件时要有意识地区分“构建时可知”的数据和“运行时需要”的数据。4.2 与 Rust 后端通信Tauri IPC桌面应用的核心能力之一是访问操作系统原生功能这是纯Web应用做不到的。在Tauri中这是通过进程间通信IPC实现的。前端Webview可以调用后端Rust定义的命令Command。1. 定义 Rust 命令在src-tauri/src目录下main.rs是入口点但命令通常定义在lib.rs中或在独立的模块里。模板可能已经有一个示例。一个简单的读取文件命令可能如下所示// src-tauri/src/lib.rs 或 commands.rs use tauri::command; use std::fs; #[command] pub fn read_file(path: String) - ResultString, String { // 在这里可以进行任何 Rust 操作例如文件 I/O、网络请求、复杂计算等。 fs::read_to_string(path).map_err(|e| e.to_string()) }然后需要在main.rs中注册这个命令使其能被前端调用。2. 在前端调用命令在前端的客户端组件中你可以使用 Tauri 提供的invoke函数来调用这个 Rust 命令。// 在客户端组件中 (例如 src/app/components/FileReader.tsx) use client; import { invoke } from tauri-apps/api/core; import { useState } from react; export function FileReader() { const [fileContent, setFileContent] useStatestring(); const handleReadFile async () { try { // 调用我们在 Rust 中定义的 read_file 命令 const content await invokestring(read_file, { path: /path/to/your/file.txt }); setFileContent(content); } catch (error) { console.error(Failed to read file:, error); } }; return ( div button onClick{handleReadFile}Read File/button pre{fileContent}/pre /div ); }3. 类型安全高级实践为了获得更好的开发体验Tauri 支持通过tauri-plugin或手动定义来共享 Rust 和 TypeScript 之间的类型。你可以定义一个共享的类型定义文件确保前端调用命令时的参数类型和后端接收的类型完全匹配避免运行时错误。4.3 静态导出Static Export配置与陷阱为了让 Next.js 应用能打包进 Tauri必须将其构建为静态文件。这通过在next.config.js中设置output: export来实现。模板已经配置好了// next.config.js /** type {import(next).NextConfig} */ const nextConfig { output: export, // 关键配置启用静态导出 images: { unoptimized: true, // 必须设置因为 Next.js 图像优化需要 Vercel 服务器 }, // 注意使用 output: export 时以下配置将自动失效或需要调整 // - rewrites, redirects (除非是 headers 和 redirects 输出) // - 动态 API 路由它们会被构建为静态 JSON 文件 }; module.exports nextConfig;必须注意的陷阱next/image组件正如模板警告所述Next.js 强大的Image组件默认依赖 Vercel 的图片优化服务。在静态导出模式下你必须设置unoptimized: true这样它就会退化为普通的img标签。如果你需要图片优化可以考虑在构建流程中集成其他工具如sharp或者使用第三方服务。客户端/服务端组件边界在开发服务器next dev中即使你错误地在服务端组件中使用了浏览器API它也可能工作因为开发服务器运行在Node.js环境。但在静态导出时这些代码路径会在构建时执行导致ReferenceError: window is not defined。务必使用use client指令明确划分边界并将依赖浏览器环境的代码包括Tauri API调用放在客户端组件或useEffect中。动态路由如果你使用了动态路由如app/blog/[slug]/page.tsx你需要使用generateStaticParams函数在构建时预生成所有可能的静态页面否则这些路由在打包后的应用中将是404。5. 构建、分发与生产环境优化5.1 构建发布版本当你完成开发并准备分发应用时需要运行构建命令pnpm tauri build这个命令会依次执行以下操作构建 Next.js 前端运行next build。由于配置了output: export这会在out目录下生成一系列静态文件HTML, JS, CSS, 图片等。构建 Tauri 应用编译 Rust 后端代码为发布Release模式这比开发模式更慢但会进行大量优化。打包将生成的前端静态文件out目录和编译好的 Rust 可执行文件及资源一起打包成目标平台的安装包。pnpm tauri build默认会为你当前的操作系统构建安装包如 Windows 的.msi或.exe macOS 的.app或.dmg Linux 的.deb或.AppImage。输出文件位于src-tauri/target/release/bundle/目录下。跨平台构建如果你想在一台机器上为所有平台构建理论上可行但非常复杂因为需要安装各个平台的交叉编译工具链如为 Windows 构建需要mingw-w64。更推荐的方法是使用GitHub Actions CI/CD进行自动化多平台构建。Tauri 官方提供了完善的 GitHub Actions 示例 你可以将其整合到模板已有的工作流中。5.2 生产环境优化要点Rust 发布构建优化确保你的Cargo.toml中针对发布版本的优化是开启的。Tauri 默认配置通常已经处理好了。你可以通过src-tauri/Cargo.toml中的[profile.release]部分进行微调例如设置lto true链接时优化来进一步减小二进制文件体积和提升性能但这会显著增加编译时间。前端资源优化代码分割与懒加载充分利用 Next.js 的动态导入dynamic import来懒加载非首屏需要的组件或库。这在桌面应用中同样重要可以加快应用启动时的初始加载速度。分析打包体积使用next/bundle-analyzer来分析最终生成的 JavaScript 包找出体积过大的依赖并考虑替代方案或优化。压缩与 Tree ShakingNext.js 的生产构建默认会进行代码压缩和 Tree Shaking。确保你没有意外引入导致 Tree Shaking 失效的模块导入方式如import * as lodash而只用了其中一两个函数。应用图标与元数据在src-tauri目录下有一个icons文件夹里面应该包含各种尺寸的应用图标。Tauri 构建时会使用这些图标。请务必用你自己的图标替换它们。图标生成可以使用工具如 Tauri Icon Kit 或在线服务。权限与安全配置仔细审查src-tauri/tauri.conf.json中的allowlist配置。Tauri 采用“默认拒绝”的安全策略。你需要在allowlist中明确启用你的应用所需访问的特定 API如fs.readFile、shell.open等。生产应用应遵循最小权限原则只开启必要的功能以减少潜在的安全攻击面。6. 常见问题排查与调试技巧实录在实际开发中你肯定会遇到各种问题。以下是我在多次使用类似技术栈后总结的一些常见坑点和解决方案。6.1 开发服务器启动失败问题现象可能原因解决方案pnpm tauri dev报错提示缺少 WebView2 或 Rust 工具链。系统环境未满足 Tauri 要求。仔细阅读首次运行pnpm install或tauri dev时命令行给出的错误信息和指引。按照 Tauri 官方 Prerequisites 指南 逐一安装对应平台的依赖。Next.js 开发服务器启动失败端口被占用。本地 3000 端口已被其他进程使用。修改 Next.js 开发端口。可以在package.json的dev脚本中指定端口dev: next dev -p 3001并同步修改src-tauri/tauri.conf.json中devUrl的端口。Rust 编译错误提示找不到crate或版本冲突。src-tauri/Cargo.toml中的依赖项有问题或 Cargo 缓存损坏。运行cargo update更新依赖。尝试删除src-tauri/target目录和Cargo.lock文件然后重新运行pnpm tauri dev进行完全重建。6.2 运行时错误与 API 调用问题问题现象可能原因解决方案ReferenceError: window is not defined或navigator is not defined这是最常见的问题。你在服务端组件或模块顶层直接导入了依赖浏览器全局对象的代码如tauri-apps/api中的某些函数。黄金法则将与 Tauri API 或浏览器 API 相关的所有导入和调用都移到客户端组件内部。使用use client指令。如果必须在顶层导入使用动态导入import()或在useEffect中延迟加载。调用invoke时Rust 命令未找到或参数错误。1. Rust 命令未正确注册到 Tauri 应用。2. 前端调用的命令名与 Rust 中定义的函数名不匹配。3. 参数类型或结构不匹配。1. 检查src-tauri/src/main.rs确保通过.invoke_handler(tauri::generate_handler![your_command])注册了命令。2. 检查拼写。Rust 命令函数名默认会转换为蛇形命名snake_case在前端调用。3. 使用 TypeScript 严格类型并考虑使用tauri-plugin实现端到端类型安全。在 Rust 端使用#[command]宏时确保参数类型实现了serde::Deserialize。应用打包后前端资源加载失败白屏。1. Next.js 静态导出路径配置问题。2. Tauri 配置中build.distDir路径指向错误。1. 确保next.config.js中output: export已设置并且没有使用不支持的特性如trailingSlash配置需注意。2. 检查src-tauri/tauri.conf.json中的build: { distDir: ../out }。../out是相对于src-tauri目录的 Next.js 输出目录确保路径正确。6.3 性能与构建优化问题问题现象可能原因解决方案应用启动慢或首次打开窗口时间长。1. 前端 JavaScript 包体积过大。2. Rust 发布模式编译未开启优化或开启了过重的优化如 LTO。1. 使用 Next.js Bundle Analyzer 分析包体积拆分代码懒加载非关键组件。2. 检查Cargo.toml的[profile.release]配置。opt-level z或s可以优化体积lto true优化性能但增加编译时间根据需求权衡。pnpm tauri build时间非常长。1. 首次构建需要下载和编译所有 Rust 依赖。2. 开启了 LTO 或复杂的代码生成Codegen设置。1. 首次构建耐心等待。后续增量构建会快很多。2. 在开发阶段可以考虑使用cargo build --release单独测试 Rust 部分或暂时关闭 LTO。对于 CI/CD可以利用缓存如 GitHub Actions 的actions/cache来缓存~/.cargo和target目录。最终安装包体积仍然偏大。1. 前端资源包含未使用的代码或大图。2. Tauri 打包了调试符号或未压缩资源。1. 前端进行 Tree Shaking 和资源压缩检查。2. 确保是tauri build --release。Tauri 2.0 在打包方面已经做了很多优化。可以尝试使用upx等工具进一步压缩二进制文件需额外配置。6.4 调试技巧前端调试如前所述在 Tauri 窗口中按CtrlShiftI打开开发者工具使用 Sources、Console、Network 等面板进行调试与 Chrome 开发者工具体验一致。Rust 后端调试Rust 的调试相对复杂。你可以在src-tauri/src的代码中使用println!或dbg!宏进行日志输出这些信息会打印到启动 Tauri 应用的终端里。对于更复杂的调试需要配置 IDE如 VS Code 搭配CodeLLDB扩展进行断点调试。进程通信调试在调用invoke时在.catch块中打印错误对象。在 Rust 端命令函数返回的Result中的Err信息会被传递到前端作为错误信息确保你的错误信息是描述性的。这个模板提供了一个强大但略显复杂的起点。它不适合每一个桌面应用项目但对于那些追求现代Web开发体验、需要复杂前端交互、且团队熟悉Next.js的中大型项目来说它是一个极佳的生产力跳板。关键在于理解其“静态导出”的本质规划好数据流和组件边界并善用Tauri提供的安全原生能力。

相关文章:

Tauri 2.0 + Next.js 16 桌面应用开发模板全解析

1. 项目概述与核心价值 如果你正在寻找一个能快速启动桌面应用开发的现代技术栈模板,那么 kvnxiao/tauri-nextjs-template 绝对值得你花时间研究。这个模板将两个看似不同领域的技术——用于构建现代Web前端的Next.js和用于创建跨平台桌面应用的Tauri——巧妙地结…...

Sherlock AI Plugin:自动化探测项目中AI集成的安全审计工具

1. 项目概述:一个能“嗅探”AI插件的侦探工具 如果你和我一样,在日常开发或者安全审计中,经常需要快速了解一个项目里集成了哪些AI能力,那你肯定遇到过这样的麻烦:你得手动去翻看代码库的配置文件、依赖声明&#xff0…...

Docker Compose全栈开发沙盒:OpenClaw工作空间实战指南

1. 项目概述:一个为“OpenClaw”量身打造的全栈开发沙盒 如果你正在开发一个名为“OpenClaw”的项目,无论是想快速搭建一个演示环境,还是需要一个标准化的开发、测试沙盒,那么 win4r/openclaw-workspace 这个项目很可能就是你正…...

AI代理成本管理:基于MCP协议构建成本监控与预算控制系统

1. 项目概述:一个为AI代理成本管理而生的MCP服务器最近在折腾AI应用开发,特别是基于大语言模型的智能代理(Agent)时,发现一个挺头疼的问题:成本不可控。你给Agent接上各种工具,让它去调用搜索引…...

Rust代码知识图谱构建:从静态分析到架构洞察的工程实践

1. 项目概述:一个为Rust代码量身定制的知识图谱构建工具如果你和我一样,长期在Rust生态里摸爬滚打,面对一个动辄几十个模块、依赖关系错综复杂的中大型项目时,肯定有过这样的体验:想理清某个核心结构体的所有使用路径&…...

Windows控制台光标定位工具elocate:原理、部署与实战应用

1. 项目概述:Windows控制台光标定位工具在Windows命令行下干活,尤其是写一些需要动态更新屏幕内容的脚本时,光标位置的控制是个挺让人头疼的事儿。你没法像在图形界面里那样,直接用鼠标点一下,或者调用一个简单的API就…...

高瞬态高功率激光级储能锂电池系统设计要求【浩博电池】

高能激光类设备(工业/科研级)对电源系统的核心要求是: 极短时间内释放极高功率 极低内阻 极高稳定母线电压 极强安全冗余控制能力。一、系统总体设计目标该类高功率脉冲能源系统需满足:毫秒级瞬态放电能力(脉冲负载…...

2025年实时影响因子: 全球期刊(26.5.2更新)

点击蓝字 关注我们2025年实时影响因子: 全球期刊近日,我们通过Web of Science 官网数据库,对全球期刊开展系统性分析。本次重点筛选2025年影响因子 (IF) 排名靠前的100本核心期刊,涵盖54本研究类期刊与46本综述期刊两大类别。在研究类期刊中&…...

【RAG】【node_postprocessor02】Cohere Rerank 重排序功能完整案例

本案例演示如何使用Cohere Rerank重排序器来提高检索增强生成(RAG)系统的检索质量,通过重排序初始检索结果来获取更相关的文档片段。1. 案例目标本案例的主要目标是展示如何:使用LlamaIndex构建基本的向量检索系统集成Cohere Rerank重排序器优化检索结果…...

特种自动化运输平台锂电池完整设计方案要求【浩博电池】

特种自动化运输平台锂电池完整设计方案要求特种自动化运输平台广泛应用于危化品转运、军工物流、港口重载调度、矿山无人运输、核电站物资搬运及高风险工业区域自动化作业场景。其核心特征是复杂环境运行、无人化控制、高安全等级要求、强负载能力与多工况适配。因此&#xff0…...

DC综合揭秘:你的case语句为啥没变成MUX?用RTL原语精准控制GTECH映射

DC综合揭秘:用RTL原语精准控制case语句的MUX映射 在数字IC设计流程中,RTL代码到门级网表的综合过程就像一场精心编排的魔术表演。设计工程师写下优雅的case语句,期待它在综合后变成预期的多路选择器(MUX),但…...

AI编码助手技能面板:用SwiftUI打造高效提示词工作流

1. 项目概述:一个为AI编码助手设计的原生技能面板如果你和我一样,日常开发重度依赖Cursor、Claude Code这类AI编码助手,那你一定遇到过这样的场景:你正在SwiftUI里构建一个复杂的视图,需要快速生成一个符合苹果人机界面…...

FPGA串口通信IP核wbuart32集成指南:从Wishbone总线到驱动开发

1. 项目概述:一个轻量级的串口通信IP核最近在搞一个FPGA上的嵌入式小系统,需要和上位机进行简单的数据交互。像UART这种串口通信,可以说是嵌入式开发里最基础、最常用的外设之一了。虽然很多商用或开源的SoC平台都集成了UART控制器&#xff0…...

如何处理SQL存储过程大结果集_采用输出参数返回数据

存储过程输出参数无法返回结果集,仅支持单个标量值;正确方式是直接SELECT、临时表或XML/JSON字符串输出,避免误用游标等非常规方案。存储过程不能用输出参数返回结果集SQL Server(以及绝大多数数据库)的输出参数 outpu…...

基于SystemC TLM-2.0的RISC-V处理器仿真框架构建与实战

1. 项目概述:一个基于TLM的RISC-V处理器仿真框架最近在处理器架构探索和软件生态早期开发的圈子里,一个绕不开的话题就是如何快速、高效地对一个新设计的CPU进行功能验证和软件移植。传统的FPGA原型验证虽然真实,但迭代周期长,环境…...

碧蓝航线皮肤提取

碧蓝航线的皮肤简单可以分为静态皮肤和动态Live2d皮肤。绝大部分资源文件都在Android/data/com.bilibili.azurlane/files/AssetBundles路径下,听说还有少部分资源文件在安装包apk文件的assets\AssetBundles路径下,不确定真假,至少我目前所需要…...

为什么IEEE标准委员会已将其纳入2026 AI安全评估参考框架?AISMM快速评估版的5项硬核认证指标

更多请点击: https://intelliparadigm.com 第一章:AISMM快速评估版的诞生背景与战略意义 人工智能安全成熟度模型(AISMM)快速评估版是面向中小规模AI研发团队与合规先行组织推出的轻量化、可落地的安全治理工具。其诞生源于三大现…...

扩散模型在图像编辑中的应用与优化实践

1. 扩散模型与图像编辑的技术融合去年我在处理一批商业摄影素材时,客户突然要求将照片中的阴天背景替换成阳光明媚的沙滩场景。传统Photoshop处理需要数小时精细修图,而使用扩散模型技术,我在15分钟内就输出了自然逼真的合成效果。这种技术革…...

新粗野主义React组件库:从设计原理到工程实践

1. 项目概述:当“新粗野主义”撞上组件库 如果你是一个前端开发者,或者对现代网页设计趋势有所关注,最近可能被一种名为“新粗野主义”的设计风格刷屏。它大胆、直接、甚至有些“粗糙”,用高饱和度的色彩、粗重的边框、不加修饰的…...

AI辅助Android开发实战:从零构建国标收藏应用

1. 项目概述:一个用AI工具“硬肝”出来的国标收藏App最近在做一个项目,需要频繁查阅国家标准,每次都得打开浏览器,登录“国家标准全文公开”网站,再在一堆搜索结果里翻找,效率实在太低。作为一个懒人&#…...

Cursor AI编程助手行为准则:.cursorrules配置详解与团队实践

1. 项目概述:一个为AI编程伙伴定制的“行为准则”如果你和我一样,深度使用Cursor这类AI驱动的代码编辑器,那你一定遇到过这样的场景:你满怀期待地让AI帮你重构一段复杂的业务逻辑,结果它生成的代码风格和你项目里现有的…...

全志D1 RISC-V开发套件深度评测与应用实践

1. Dongshan Nezha STU开发套件概览 Dongshan Nezha STU是一款基于全志D1 RISC-V处理器的开发套件,由核心模块和扩展底板组成。这个套件最吸引人的地方在于它的双重身份——既可以作为独立的单板计算机(SBC)使用,又能作为系统级模块(SoM)嵌入到其他设备中…...

丹诺医药通过上市聆讯:无营收,年亏1.5亿 现金流出净额8720万

雷递网 雷建平 5月6日丹诺医药(苏州)股份有限公司(简称:“丹诺医药”)今日通过上市聆讯,准备在港交所上市。丹诺医药成立以来获得过多次融资,其中,2022年1月到2023年1月完成D轮1.48亿…...

Taotoken 提供的标准 OpenAI 协议如何简化现有应用的迁移与集成工作

Taotoken 提供的标准 OpenAI 协议如何简化现有应用的迁移与集成工作 对于已经基于 OpenAI 官方 API 构建了应用或服务的开发者而言,引入新的模型服务或切换供应商往往意味着需要投入额外的适配和测试成本。Taotoken 平台通过提供与 OpenAI 官方 API 完全兼容的 HTT…...

终极指南:如何快速掌握Android虚拟摄像头,3个简单步骤实现视频替换

终极指南:如何快速掌握Android虚拟摄像头,3个简单步骤实现视频替换 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam 你是否厌倦了在视频会议中总是使用真实摄像头&a…...

win2xcur工具链:跨平台光标主题转换的完整解决方案

1. 项目概述:跨平台光标主题转换的瑞士军刀如果你和我一样,是个喜欢折腾桌面美化的Linux用户,或者是个想把心爱的Linux光标带到Windows上的玩家,那你肯定遇到过光标格式不兼容这个老大难问题。Windows用的是.cur和.ani格式&#x…...

Python Tkinter大作业荜邺设计学生信息管理系统项目源码白菜价MySQL

一、项目介绍系统角色分为游客、管理员两种角色。游客功能包括:学院查询,专业查询,学生查询,公告查询。管理员功能包括:学院管理,专业管理,学生管理,公告管理,修改密码。…...

AI智能体成本管理实战:基于MCP协议的成本监控与优化

1. 项目概述:当AI智能体开始“精打细算”最近在折腾AI智能体(Agent)的开发,一个绕不开的痛点就是成本控制。无论是调用OpenAI的GPT-4,还是使用Claude、Gemini等大模型,每一次API调用都意味着真金白银的支出…...

为 Cursor 编辑器构建持久化记忆:基于 MCP 协议与向量数据库的 AI 对话历史管理方案

1. 项目概述:一个为 Cursor 编辑器注入记忆的“外挂”如果你和我一样,深度依赖 Cursor 这类 AI 驱动的代码编辑器,那你一定遇到过这个痛点:当你在一个庞大的项目中连续工作几天,或者中途关闭了编辑器,再次打…...

基于飞书API的考勤数据自动化处理工具设计与实现

1. 项目概述:一个飞书考勤数据的自动化处理工具最近在团队内部做了一次小范围的自动化工具分享,聊到了一个我自己维护了挺久的小项目:feishu-inout。这本质上是一个专门用来处理飞书(Lark)考勤数据的命令行工具。如果你…...