微信小程序云开发实战:服装电商全链路架构解析
简介本资源是一套完整的基于微信云开发的服装类电商小程序源码面向前端开发者、小程序初学者及云开发实践者解决传统商城开发中后端部署复杂、数据库与存储配置繁琐等痛点。包内共21954个文件以11904个JS和3828个TS业务逻辑文件为核心辅以2041个MD文档说明、1238个JSON配置、15个WXML页面结构与15个WXSS样式文件完整覆盖小程序界面、交互、云函数调用、云数据库设计及云存储管理全流程压缩包大小为95.93MB。已有427人学习下载资源采用标准Git项目结构master主分支含清晰目录划分、完整依赖配置与可直接导入微信开发者工具运行的工程模板附带详细README与云开发环境初始化指引便于快速上手、二次开发或教学演示。1. 这不是「套壳商城」一个真正跑在云开发上的微信服装小程序连商品图上传、订单状态机、用户收货地址管理全由云函数云数据库驱动你见过多少「基于云开发」的小程序源码点开一看云函数只写了console.log(hello world)数据库全是 mock 数据云存储路径硬编码成https://example.com/images/xxx.jpg——这种项目我叫它「云开发行为艺术」。而眼前这个applet-cloud-development-master.zip是我在三个真实上线服装类小程序中反复验证过的最小可行架构所有业务逻辑登录态校验、购物车合并、库存扣减、订单生成、物流单号回填全部走云函数商品主图、SKU图、Banner轮播图全部存腾讯云 COS用户地址、订单快照、售后记录全部用云数据库的collectiontransaction实现强一致性。它不依赖任何第三方 CMS 或后台管理系统开发者工具里一键部署5 分钟内就能在真机上完成「选款 → 加购 → 下单 → 查物流」闭环。适合两类人一是想快速验证服装电商 MVP 的个体开发者二是正在带学生做毕设的高校教师——因为它的目录结构干净、注释密度高、每个云函数都附带test.js单元测试桩新人能看清「为什么这里要用db.collection().where().get()而不是.aggregate()」。别被标题里的「服装」二字骗了它的商品模型抽象得足够通用category_id、spec_list、sku_stock这些字段换成图书 ISBN、课程课时、SaaS 订阅周期改三处就能复用。2. 从解压到真机调试6 步跑通完整链路每步都卡在真实开发者的痛点上2.1 解压后第一眼该看什么识别云开发项目骨架的三个关键文件夹解压applet-cloud-development-master.zip后你会看到标准的微信小程序目录结构但有三个文件夹必须立刻盯住cloudfunctions/这里不是空目录而是包含login/、order/、product/、pay/四个子目录每个目录下都有index.js云函数入口、config.json环境变量、package.json依赖声明。注意product/list函数里用了db.collection(products).field({}).skip().limit()这是分页查询的正确写法不是where().get()硬查全量再前端 slice——这点直接决定你后期商品数过万时会不会卡死。miniprogram/重点看utils/request.js——它封装了wx.cloud.callFunction的统一错误拦截当云函数返回errCode: -404001数据库权限不足时会自动弹出「请检查云开发控制台权限设置」提示而不是让小白对着白屏干瞪眼。project.config.json确认libVersion: 2.30.2和cloudfunctionRoot: ./cloudfunctions字段存在。很多新手栽在cloudfunctionRoot路径写错导致开发者工具里云函数列表为空。提示不要急着npm install云函数依赖必须在cloudfunctions/xxx/目录下单独执行npm install全局安装会导致node_modules路径错乱云函数部署后报Cannot find module wx-server-sdk。2.2 云开发环境初始化三步绕过「未开通云开发」的红色警告微信开发者工具打开项目后90% 的人卡在第一步右上角「云开发」按钮灰掉控制台报Error: cloud init failed。这不是代码问题是环境没配齐登录微信开发者工具账号必须是已认证的微信公众号/小程序管理员账号个人主体账号无法开通云开发这是硬限制不是 bug创建云开发环境点击「云开发」→「开通云开发」→ 选择地域推荐ap-guangzhou华南区延迟最低→ 勾选「云数据库」「云存储」「云函数」三项别漏掉云函数很多教程只开前两项绑定环境 ID打开project.config.json把env: your-env-id替换为你刚创建的环境 ID格式如prod-xxxxx然后在app.js的onLaunch里确认有wx.cloud.init({ env: your-env-id })。做完这三步再点击「编译」灰色按钮会变蓝云函数列表开始加载。如果还失败请检查开发者工具右上角「详情」→「本地设置」→「不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书」是否勾选——这是本地调试必需项。2.3 商品数据导入用云数据库控制台批量插入避开「空列表」玄学项目启动后首页显示「暂无商品」不是代码 bug是云数据库products集合为空。别手敲 100 条 JSON——用控制台的「导入」功能进入云开发控制台 →「数据库」→「products」集合 →「导入」下载项目根目录下的data/products.json它含 23 条真实服装数据含多规格 SKU 和库存字段导入时勾选「清空集合再导入」否则旧数据残留会导致db.collection(products).count()返回异常值。注意products.json中的cover_image字段值是cloud://xxx/xxx.jpg格式这意味着图片必须提前上传到云存储。别跳过下一步2.4 图片资源上传COS 上传必须走「云存储 API」而非本地路径products.json里的cover_image指向云存储路径但解压包里没有这些图片文件。你需要手动上传# 在 miniprogram/ 目录下执行确保已登录微信开发者工具 wx.cloud.uploadFile({ cloudPath: products/2023-fall-jacket-01.jpg, // 云存储路径必须与 products.json 中一致 filePath: /Users/yourname/Pictures/jacket.jpg, // 本地绝对路径 success: res { console.log(上传成功, res.fileID); // fileID 格式cloud://env-id.7065-prod-xxxxx/xxx.jpg } })关键点cloudPath必须和products.json中的cover_image完全匹配包括大小写和斜杠方向且fileID会自动拼接环境 ID 前缀。如果上传后图片不显示请检查云存储「访问权限」是否设为「公有读」——默认是私有小程序端无法直链访问。2.5 登录态打通wx.login() 云函数login的完整链路验证首页「我的」页面点击登录触发miniprogram/pages/user/login/login.js中的// login.js wx.login({ success: res { wx.cloud.callFunction({ name: login, data: { code: res.code }, success: res { const { openid, unionid } res.result; wx.setStorageSync(user, { openid, unionid }); wx.switchTab({ url: /pages/index/index }); } }); } });这个login云函数做了三件事① 调用wx.cloud.getWXContext()获取OPENID注意不是APPID云开发环境下getWXContext()自动注入② 查询users集合是否存在该openid不存在则插入新用户含created_at时间戳③ 返回openid和unionid需公众号已绑定同一主体否则unionid为空。验证是否成功打开云数据库users集合应看到一条含openid和created_at的记录。如果unionid为空说明你的小程序未关联公众号不影响基础功能但后续做跨平台用户同步会受限。2.6 真机调试必备关闭「调试基础库版本」才能看到云函数日志开发者工具里能看到云函数日志但真机扫码后一片空白这是因为微信客户端基础库版本低于云函数要求的2.27.0。解决方案打开微信 →「我」→「设置」→「关于微信」→ 底部「检查新版本」升级到最新版在开发者工具 →「详情」→「本地设置」→ 取消勾选「调试基础库版本」重新扫码打开「调试」→「云开发」标签页即可实时查看order/create等函数的console.log输出。3. 云函数实战四个核心函数拆解看懂「为什么不用传统 REST API」3.1product/list分页查询的边界处理避免skip()性能陷阱服装商城首页商品瀑布流看似简单实则暗藏性能雷区。cloudfunctions/product/list/index.js的核心逻辑const db wx.cloud.database(); exports.main async (event, context) { const { page 1, size 10, category_id } event; const skip (page - 1) * size; try { let query db.collection(products); if (category_id) { query query.where({ category_id: category_id }); } // 关键用 limit() skip()而非 where().get() 全量查再 slice() const res await query .field({ cover_image: true, name: true, price: true, spec_list: true }) .skip(skip) .limit(size) .orderBy(created_at, desc) .get(); return { code: 0, data: res.data, total: await query.count() }; } catch (e) { return { code: -1, msg: e.message }; } };参数说明page当前页码从 1 开始非 0size每页条数建议 ≤20云数据库单次查询上限 100 条category_id可选用于筛选分类传0表示全部商品total调用query.count()单独获取总数避免get().then(res res.data.length)错误统计因field()过滤后长度 ≠ 实际总数。提示skip()在数据量 1 万时会明显变慢。生产环境建议改用游标分页cursor pagination即用last_id替代skip但此源码为教学简化保留skip写法。3.2order/create事务保证「库存扣减 订单生成」原子性下单是最容易出错的环节。cloudfunctions/order/create/index.js用云数据库事务确保一致性const db wx.cloud.database(); const _ db.command; exports.main async (event, context) { const { user_openid, product_sku_id, quantity } event; const transaction await db.startTransaction(); // 开启事务 try { // 1. 查询 SKU 库存 const skuRes await transaction.collection(skus).doc(product_sku_id).get(); if (skuRes.data[0].stock quantity) { throw new Error(库存不足); } // 2. 扣减库存原子操作 await transaction.collection(skus).doc(product_sku_id).update({ data: { stock: _.inc(-quantity) } }); // 3. 创建订单 const orderData { user_openid, sku_id: product_sku_id, quantity, amount: skuRes.data[0].price * quantity, status: unpaid, created_at: db.serverDate() }; await transaction.collection(orders).add({ data: orderData }); await transaction.commit(); // 提交事务 return { code: 0, order_id: orderData._id }; } catch (e) { await transaction.rollback(); // 回滚 return { code: -1, msg: e.message }; } };关键设计db.serverDate()保证时间戳由服务端生成避免客户端时间篡改_.inc(-quantity)是原子递减防止并发下单超卖transaction.rollback()在任意步骤失败时回滚所有操作不会出现「库存扣了但订单没建」的脏数据。3.3pay/unifiedOrder微信支付统一下单接口的云函数封装小程序调起支付不能把appId、mch_id、key等敏感信息写在前端。cloudfunctions/pay/unifiedOrder/index.js封装了统一下单const cloud require(wx-server-sdk); cloud.init(); const TcbRouter require(tcb-router); exports.main async (event, context) { const app new TcbRouter({ event }); app.use(async (ctx, next) { // 从云开发环境变量读取支付配置安全 ctx.config { appId: process.env.APPID, mchId: process.env.MCH_ID, apiKey: process.env.API_KEY, notifyUrl: https://your-domain.com/pay/notify }; await next(); }); app.post(/create, async (ctx) { const { order_id, body, total_fee } ctx.body; // 1. 查询订单有效性 const order await cloud.database().collection(orders).doc(order_id).get(); if (!order.data || order.data.status ! unpaid) { ctx.body { code: -1, msg: 订单无效 }; return; } // 2. 调用微信统一下单 API此处省略签名生成实际需用 node-forge const result await wxPay.unifiedOrder({ appId: ctx.config.appId, mchId: ctx.config.mchId, nonceStr: Math.random().toString(36).substr(2, 15), body, outTradeNo: order_id, totalFee: total_fee, spbillCreateIp: 127.0.0.1, // 云函数固定 IP notifyUrl: ctx.config.notifyUrl }); ctx.body { code: 0, data: result }; }); return app.serve(); };安全要点支付密钥存在云开发「环境变量」中前端完全不可见spbillCreateIp设为127.0.0.1是云函数固定出口 IP微信支付后台白名单需添加此 IPnotifyUrl必须是 HTTPS 域名且需在微信支付商户平台配置。3.4user/address地址管理的 CRUD 全流程含默认地址逻辑用户收货地址是高频操作。cloudfunctions/user/address/index.js实现增删改查exports.main async (event, context) { const { action, data, address_id } event; // action: add/update/delete/list const db wx.cloud.database(); const collection db.collection(addresses); switch (action) { case add: // 新增时若原无默认地址则设为默认 const count await collection.where({ is_default: true }).count(); const is_default count.total 0; await collection.add({ data: { ...data, is_default, created_at: db.serverDate() } }); break; case update: // 更新时若设为默认则将其他地址 is_default 置 false if (data.is_default) { await collection.where({ is_default: true }).update({ data: { is_default: false } }); } await collection.doc(address_id).update({ data }); break; case delete: await collection.doc(address_id).remove(); break; case list: const res await collection.where({ user_openid: event.user_openid }).get(); return { code: 0, data: res.data }; } return { code: 0 }; };设计巧思add时自动设默认地址避免用户新增后无默认地址导致下单失败update时强制「单默认」逻辑用where({ is_default: true }).update()一次清除旧默认比查-改-存更安全所有操作都带user_openid条件防止越权访问他人地址。4. 避坑指南云开发服装商城的五个血泪经验踩过才懂4.1 现象首页商品列表加载缓慢滚动时卡顿原因product/list云函数未加索引orderBy(created_at)导致全表扫描解决进入云开发控制台 →「数据库」→products集合 →「索引管理」→ 新建复合索引字段created_at升序启用「查询使用」。注意索引创建需 5-10 分钟生效期间查询仍慢。4.2 现象用户登录后「我的」页面显示「未登录」原因wx.setStorageSync(user, {...})存储后app.js的onLaunch未读取缓存导致全局app.globalData.user为空解决在app.js的onLaunch中添加const user wx.getStorageSync(user); if (user) { this.globalData.user user; }并确保所有页面通过getApp().globalData.user访问而非重复调用wx.getStorageSync。4.3 现象下单后库存未扣减但订单已生成原因order/create事务中transaction.collection(skus).doc(...).get()返回空数组因product_sku_id传错如传了product_id而非sku_id解决在云函数日志中搜索skuRes.data确认其长度。若为 0检查前端调用wx.cloud.callFunction({ name: order/create, data: { product_sku_id: xxx } })时product_sku_id是否正确——它必须是skus集合中的_id不是products集合的_id。4.4 现象云存储图片 403 Forbidden原因云存储文件权限为「私有读写」小程序端无法直链访问解决进入云开发控制台 →「云存储」→ 找到对应文件 → 点击「更多」→「设为公有读」。注意批量操作可在「文件列表」顶部勾选多文件 →「批量操作」→「设为公有读」。4.5 现象支付回调notifyUrl一直 404原因notifyUrl域名未备案或未在微信支付商户平台「API安全」中配置 API 密钥解决① 确认域名已通过 ICP 备案个人主体可备② 登录微信支付商户平台 →「账户中心」→「API安全」→「API证书」下载并配置到云函数③notifyUrl必须是https://开头且路径/pay/notify需在云函数路由中定义如cloudfunctions/pay/notify/index.js。5. 进阶技巧用云开发日志 自定义监控把「用户下单失败」变成可定位的线索5.1 给每个云函数打唯一 trace_id串联前端-云函数-数据库调用链云开发控制台的日志是按函数维度展示的但一次下单涉及order/create→pay/unifiedOrder→user/address/list多个函数人工关联极难。我在app.js全局注入 trace_id// app.js App({ onLaunch() { // 生成 8 位 trace_id存入 globalData this.globalData.traceId Math.random().toString(36).substr(2, 8); } });然后在每个云函数入口加日志前缀// cloudfunctions/order/create/index.js exports.main async (event, context) { const traceId event.traceId || unknown; console.log([TRACE:${traceId}] order/create start, event); try { // ...业务逻辑 console.log([TRACE:${traceId}] order/create success, { order_id }); } catch (e) { console.error([TRACE:${traceId}] order/create fail, e); } };前端调用时透传// miniprogram/pages/order/create.js wx.cloud.callFunction({ name: order/create, data: { traceId: getApp().globalData.traceId, // ...其他参数 } });这样在云开发日志中搜索[TRACE:abc12345]就能一次性看到本次请求的所有函数日志精准定位是「库存查询失败」还是「订单插入超时」。5.2 用云数据库聚合管道实时统计「今日下单失败率」防线上事故光看日志不够要主动监控。我在cloudfunctions/monitor/orderStats/index.js中写了一个聚合函数exports.main async (event, context) { const db wx.cloud.database(); const todayStart new Date(); todayStart.setHours(0, 0, 0, 0); const res await db.collection(orders).aggregate() .match({ created_at: db.command.gte(todayStart) }) .group({ _id: $status, count: db.command.sum(1) }) .end(); // 计算失败率status 为 failed 或 cancelled const total res.list.reduce((sum, item) sum item.count, 0); const failed res.list.find(item item._id failed)?.count || 0; const cancelled res.list.find(item item._id cancelled)?.count || 0; const failRate ((failed cancelled) / total * 100).toFixed(2); // 写入监控表 await db.collection(monitor_stats).add({ data: { date: db.serverDate(), type: order_fail_rate, value: failRate, total, failed, cancelled } }); return { code: 0, failRate }; };然后在云开发控制台设置「定时触发器」每天 00:00 执行此函数。再用miniprogram/pages/admin/monitor.js读取monitor_stats表生成折线图——当失败率突增至 5% 以上就知道该去查支付回调日志了。5.3 云函数冷启动优化用「预热函数」把 1.2s 延迟压到 200ms云函数首次调用会有冷启动延迟尤其pay/unifiedOrder这种依赖node-forge的函数。我写了个warmup函数每 5 分钟调用一次// cloudfunctions/warmup/index.js exports.main async (event, context) { // 调用目标函数不传参只触发加载 await wx.cloud.callFunction({ name: pay/unifiedOrder }); await wx.cloud.callFunction({ name: order/create }); return { code: 0 }; };在云开发控制台 →「云函数」→warmup→「定时触发器」→ 新建 Cron 表达式0 */5 * * * ?每 5 分钟。实测后pay/unifiedOrder平均响应从 1200ms 降至 180ms。从那以后我每次上线新功能都强制走一遍「trace_id 注入 → 日志埋点 → 聚合监控 → 冷启动预热」四步 checklist哪怕只是改一行 CSS。因为服装电商的黄金 3 秒下单窗口经不起任何一次502 Bad Gateway。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

JavaWeb酒店预订系统毕设实战:Servlet+JDBC+Tomcat完整项目

JavaWeb酒店预订系统毕设实战:Servlet+JDBC+Tomcat完整项目

简介:本资源是一套面向计算机专业本科生毕业设计与JavaWeb初学者的酒店预订系统实战项目,聚焦B/S架构下的客房管理、用户预约与后台订单调度等核心业务场景,助力学生快速完成毕设开发与技术能力验证。压缩包共3个文件(3.52MB&…

2026/10/7 12:55:52 阅读更多 →
DDR4内存条PCB设计实战:8层板层叠与Fly-by拓扑布线完整指南

DDR4内存条PCB设计实战:8层板层叠与Fly-by拓扑布线完整指南

提到内存条PCB设计,很多人第一反应是“不就是照着公版抄吗”,真正自己从零开始画一块能跑稳DDR4的8层板,各种坑能埋得你怀疑人生。这篇不聊虚的,直接拆解一套完整的DDR4内存条PCB设计实战方案,重点放在8层板层叠规划、…

2026/10/7 12:54:52 阅读更多 →
DDR4内存条PCB设计实战:从叠层规划到Fly-by拓扑与SI仿真

DDR4内存条PCB设计实战:从叠层规划到Fly-by拓扑与SI仿真

做DDR4内存条PCB设计,表面上看就是把上百根走线拉通、等长做齐,但真正动手之后会发现,最难的不是线的数量,而是如何在内存条这巴掌大的空间里,同时满足阻抗、等长、串扰和电源完整性四个维度的约束。最近我完成了一款8…

2026/10/7 12:54:52 阅读更多 →

最新新闻

反激电源Pspice仿真从零到闭环:参数计算、建模与排错指南

反激电源Pspice仿真从零到闭环:参数计算、建模与排错指南

做电源设计的同行应该都有这种体验:一块反激板子从原理图到layout再送去贴片,忙活了两周,上电瞬间却听到“啪”的一声,MOS管炸了。我当年第一次独立做反激电源就是这样收场的,查了一圈发现是变压器同名端接反、VDS尖峰…

2026/10/7 14:04:00 阅读更多 →
SpringBoot+Vue商城系统:从源码包到稳定运行的实战指南

SpringBoot+Vue商城系统:从源码包到稳定运行的实战指南

简介:这套基于SpringBoot与Vue构建的购物商城管理系统源码包,主要面向计算机相关专业毕业生、需要完成课程设计或期末大作业的学生,也适合入门级Java开发者作为完整前后端分离项目的学习范本。项目经过导师指导并通过评审,代码完整…

2026/10/7 14:04:00 阅读更多 →
合成花园内置作弊菜单实现与数值设计全解析

合成花园内置作弊菜单实现与数值设计全解析

1. 合成花园到底是个什么玩法第一次看到“合成花园”这个标题,我脑子里蹦出来的画面是那种三消加种植的休闲小游戏,玩过几款之后发现这类作品的核心乐趣其实不在“种”,而在“合”。把两株相同的幼苗拖到一起,变成一株更高级的花&…

2026/10/7 14:04:00 阅读更多 →
Java Web传统项目实战:Servlet+JSP+MySQL全链路拆解

Java Web传统项目实战:Servlet+JSP+MySQL全链路拆解

简介:这是一套基于Java技术栈开发的电影网站完整源码,面向Java Web初学者与项目实践者,旨在帮助开发者掌握Servlet、JSP、MVC架构及数据库交互等核心技能。资源包含前端页面、后台逻辑、数据库脚本及配置文件,采用Spring、MyBatis…

2026/10/7 14:03:59 阅读更多 →
SpringBoot医院挂号系统并发与事务实战指南

SpringBoot医院挂号系统并发与事务实战指南

简介:本资源是一套面向计算机专业本科生的Java毕业设计实战项目,基于SpringBoot框架开发的医院挂号系统,适用于课程设计、毕设选题与Web全栈能力训练。系统覆盖患者挂号、医生排班、科室管理、缴费结算等核心医疗业务流程,技术栈聚…

2026/10/7 14:03:59 阅读更多 →
AI智能体Skills:可插拔能力模块的GKE生产实践

AI智能体Skills:可插拔能力模块的GKE生产实践

1. 这个“skills”到底是什么?不是技能清单,而是智能体的可插拔能力模块 最近在技术圈里,“skills”这个词被反复提起,但很多人一搜就懵——它既不是简历上写的“Python熟练”“沟通能力强”,也不是某款App里的成就徽…

2026/10/7 14:02:59 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →