我的博客 - 后端重构之路
最近把博客的后端服务从 Koa 重构成了 NestJS,整个过程花了大概一周时间。这篇文章就来聊聊为什么要重构,以及重构过程中的一些经验和踩坑记录。
customRef:Vue3 响应式的“手动挡”模式
聊聊 Vue 3 的 customRef。它就像是 Vue 给开发者留的一个“手动挡”后门,让你能完全掌控响应式的触发时机。不管是处理高频输入的防抖,还是复杂的撤销重做逻辑,用它封装出来的 Composable 代码简直优雅
Vue 3.4 的 defineModel
最近在重构项目时试了下 Vue 3.4 刚转正的 defineModel,感触挺深的。以前写个 v-model 逻辑要拆成三四份,现在一个宏全搞定
告别屏幕熄灭:使用 Screen Wake Lock
通过简单的 JavaScript 代码控制设备屏幕唤醒状态,完美解决 Web 应用中的熄屏痛点
node-machine-id生成的机器ID相同
当使用 node-machine-id 发现不同设备生成的 ID 竟完全相同时,通常是由于 OS 镜像克隆导致的。本文分享如何通过 Node.js 直接读取系统底层硬件 UUID 来解决标识符重复的难题。
Python使用PyInstaller
将 Python 脚本转换为独立的 EXE 文件是分发软件的关键。本文讲解 PyInstaller 的基础打包、管理员权限获取、多资源文件集成以及解决打包后路径失效的方案。
Electron 打包失败
Electron-builder 打包时常见的 GitHub 连接超时问题,通过配置 .npmrc 镜像源实现秒级下载,解决 electron-vxx-win32-x64.zip 下载失败的问题
Promise 链式调用中 then 和 catch 为何会先后执行?
深入解析 Promise 错误冒泡机制。为什么 then 里的错误会被 catch 捕获?本文通过代码示例带你理解 Promise 链式调用中状态转换的底层逻辑。
用 TypeScript 深度封装 XMLHttpRequest
深入理解请求底层原理。本文将原生 XHR 封装为支持 Promise、拦截器、BaseUrl 的强类型 HTTP 工具类,带你掌握 TypeScript 类封装与异步流程控制。
JavaScript 实现灵动的打字机效果
打字机效果是提升网页叙事感和交互趣味性的常用手段。分享一种基于原生 JS 的简洁实现方案,并结合 CSS 动画模拟真实的光标闪烁效果。
Echarts 中 setOption 数据更新后的“数据残留”问题
ECharts 调用 setOption 更新图表时,默认会合并新旧数据。本文介绍如何通过 notMerge 参数彻底清除旧数据,确保图表状态与新数据完全同步。
TypeScript 中的 Symbol 类型
Symbol 是 ES6 引入的一种原始数据类型,旨在解决对象属性名冲突问题。本文将带你了解 Symbol 的唯一性、全局注册表机制以及在对象遍历中的特殊表现。
使用 dotenv 优雅地管理 Node.js 多环境配置
将数据库密码等敏感信息硬编码在代码中是开发大忌。本文详细介绍如何使用 dotenv 模块管理环境变量,并结合 process.env 实现开发与生产环境配置的无缝切换
Node中的process.env
深入理解 Node.js 全局变量 process.env,解决 Windows 与 Linux 环境变量设置差异及因空格导致的逻辑判断失效问题,助你优雅地在不同平台间切换数据库配置。
Vue 路由守卫 next()
路由守卫中的 next() 是放行,而 next('/path') 则是中断与重定向。本文深入探讨路由守卫的执行机制,并解决 addRoute 动态添加路由后的白屏难题。
优雅地使用 watch 监听多个响应式数据
在 Vue 3 中,我们经常需要同时观察多个状态的变化。本文分享 watch 监听多值的两种核心写法,并教你如何通过 ES6 解构赋值让代码逻辑更清晰。
Sequelize 存储时间相差8小时的问题
在使用 Sequelize 操作 MySQL 时,遇到数据库存储时间比北京时间晚8小时的情况。本文提供最简单有效的配置方案。
手把手教你规范 Git 提交信息
规范的 Git 提交信息不仅能提高代码审查效率,还能实现自动生成项目日志。本文详细解读目前主流的 Angular 提交规范,助你写出专业、清晰的 Commit
悼念模式:一行代码实现前端网页全站置灰
在特定的纪念日或哀悼日,将网页切换为黑白模式是常见的需求。本文介绍如何利用 CSS3 的 filter 属性,通过一行代码快速实现全站置灰效果,并兼顾浏览器兼容性。