归档
按日期查看我发布的所有文章。
-
opcode 运行终端命令时报错“command not found: npm”
其实不算是 opcode 的问题
-
Cherry Studio VS ChatBox
我选择 Cherry Studio 的原因。
-
在 Cherry Studio 里尝试用知识库实现全局记忆功能
这个可行
-
在 Cherry Studio 里尝试全局记忆功能
还是改用知识库吧
-
在闲鱼里使用 AI 的例子
借助 AI 赋予二手商品“人性”。
-
我最后买了什么车
果然,计划赶不上变化。
-
从 Netlify 迁移到了 Cloudflare Workers ——我居然“浪费”了这么多钱
从 Netlify 迁移到了 Cloudflare Workers ——我居然“浪费”了这么多钱
-
Next.js 静态导出时的路由片段(`/route.txt?_rsc=xxxxxx`)缓存问题
Next.js 静态导出时的路由片段(`/route.txt?_rsc=xxxxxx`)缓存问题
-
WXT 尝试
WXT 尝试
-
3 年 Monorepo 的使用感受
3 年 Monorepo 的使用感受
-
Astro vs Next.js
Astro vs Next.js
-
我的 Zustand 最佳实践
我的 Zustand 最佳实践
-
npm link 的使用踩坑记录
npm link 的使用踩坑记录
-
买车“功课”
油车 vs 电车
-
使用 Next.js 开发扩展程序的思考
使用 Next.js 开发扩展程序的思考
-
Jest 与纯 ESM 包的集成
Jest 与纯 ESM 包的集成
-
将 Node.js 项目打包成单应用(Single executable applications)的尝试
将 Node.js 项目打包成单应用(Single executable applications)的尝试
-
Webpack 的 `sideEffects` 似乎会始终对 node_modules 里的代码生效,即使是在 dev 模式
Webpack 的 `sideEffects` 似乎会始终对 node_modules 里的代码生效,即使是在 dev 模式
-
Webpack 的 `sideEffects`
Webpack 的 `sideEffects`
-
尝试 Electron Builder
尝试 Electron Builder
-
尝试 Electron Forge
尝试 Electron Forge
-
重新认识 Webpack 的 optimization.minimizer
重新认识 Webpack 的 optimization.minimizer
-
关于一个函数的 TypeScript 类型标注问题
关于一个函数的 TypeScript 类型标注问题
-
没上班的这 3 年的我的心得体会
三年总结
-
升级 WSL 里的 Ubuntu 版本
升级 WSL 里的 Ubuntu 版本
-
将 NPM 包改为直接使用 tsc 的踩坑记录
将 NPM 包改为直接使用 tsc 的踩坑记录
-
开发 NPM 包时可能不需要将代码打包进一个文件里
开发 NPM 包时可能不需要将代码打包进一个文件里
-
对扩展程序进行 E2E 测试的踩坑记录
对扩展程序进行 E2E 测试的踩坑记录
-
将 Manifest V2 的扩展程序迁移到 Manifest V3 的注意事项
将 Manifest V2 的扩展程序迁移到 Manifest V3 的注意事项
-
Webpack Tree Shaking 相关文档
Webpack Tree Shaking 相关文档
-
使用 babel 转译 typescript 代码
使用 babel 转译 typescript 代码
-
npm workspaces 问题解决
npm workspaces 问题解决
-
升级到 React 18 后的第一个 bug 出现了
升级到 React 18 后的第一个 bug 出现了
-
Jest 如何在 import 模块前运行代码
Jest 如何在 import 模块前运行代码
-
npm workspaces 踩坑记录
npm workspaces 踩坑记录
-
jest 中的 `resetAllMocks()` 和 `restoreAllMocks()`
jest 中的 `resetAllMocks()` 和 `restoreAllMocks()`
-
Nx 的初步尝试
Nx 的初步尝试
-
npm 包导出模块的选择
npm 包导出模块的选择
-
TypeScript 中的 DeepPartial
TypeScript 中的 DeepPartial
-
近半年的日常
自上次发布《回顾我一年半的自由职业生活》已经过去四个月了,我奇迹般的生活又延续了四个月。
-
在服务器 build docker image 时服务器会卡死的问题分析及解决方案
在服务器 build docker image 时服务器会卡死的问题分析及解决方案
-
我是如何一步步踏入 iframe 的陷阱的
我是如何一步步踏入 iframe 的陷阱的
-
回顾我一年半的自由职业生活
去年(2020 年)6 月从公司离职后,我已经做了一年半的自由职业者了。
-
尝试用 Puppeteer 测试扩展程序
尝试用 Puppeteer 测试扩展程序
-
自动化测试 JavaScript
自动化测试 JavaScript
-
React Hooks 中两种 ref 赋值方式的区别
React Hooks 中两种 ref 赋值方式的区别
-
M1 Air 运行 jest 时卡住 / 内存泄漏的问题解决方案
M1 Air 运行 jest 时卡住 / 内存泄漏的问题解决方案
-
放弃使用 Yarn 2 的几点原因
放弃使用 Yarn 2 的几点原因
-
未备案域名绑定服务器访问不了的问题原因
未备案域名绑定服务器访问不了的问题原因
-
更换域名的后续问题:SameSite
更换域名的后续问题:SameSite
-
将域名的 DNS 记录从 DNSPod 迁移到 Cloudflare 踩坑日志
将域名的 DNS 记录从 DNSPod 迁移到 Cloudflare 踩坑日志
-
更换划词翻译网站域名
更换划词翻译网站域名
-
被 Node.js 的异步上了一课
被 Node.js 的异步上了一课
-
将划词翻译的 Chrome 和 Firefox 安装包合二为一的尝试
将划词翻译的 Chrome 和 Firefox 安装包合二为一的尝试
-
两个 P0 事故的反思
两个 P0 事故的反思
-
z-index 与堆叠上下文(stacking context)
z-index 与堆叠上下文(stacking context)
-
使用 Netlify 和七牛 CDN 打造快速响应的静态网站
使用 Netlify 和七牛 CDN 打造快速响应的静态网站
-
textContent 与 innerText 的区别
textContent 与 innerText 的区别
-
念念不忘,必有回响——划词翻译 8 岁了
念念不忘,必有回响——划词翻译 8 岁了
-
从 VuePress 1 迁移到 Docusaurus 2
从 VuePress 1 迁移到 Docusaurus 2
-
无痕(隐身)模式对扩展程序的影响
无痕(隐身)模式对扩展程序的影响
-
给 WSL2 使用 Windows 代理的方法
给 WSL2 使用 Windows 代理的方法
-
Tesseract.js 在划词翻译里的简单应用
Tesseract.js 在划词翻译里的简单应用
-
《如何开发一个划词翻译扩展程序》系列文章正在持续更新中
《如何开发一个划词翻译扩展程序》系列文章正在持续更新中
-
在 Windows 10 / Webstorm 使用 WSL 2 运行项目
在 Windows 10 / Webstorm 使用 WSL 2 运行项目
-
划词翻译服务器操作记录
划词翻译服务器操作记录
-
离线数据同步的具体实现思路(二)
离线数据同步的具体实现思路(二)
-
离线数据同步的具体实现思路
离线数据同步的具体实现思路
-
客户端 / 服务器数据同步机制的一点思考
客户端 / 服务器数据同步机制的一点思考
-
使用 React Devtools 调试浏览器扩展程序里的 React 代码
使用 React Devtools 调试浏览器扩展程序里的 React 代码
-
记一次解决 ERR_STREAM_WRITE_AFTER_END 问题的过程
记一次解决 ERR_STREAM_WRITE_AFTER_END 问题的过程
-
Shadow DOM 在浏览器扩展程序中的应用
Shadow DOM 在浏览器扩展程序中的应用
-
优雅的区分浏览器的双击选词与三击选段
优雅的区分浏览器的双击选词与三击选段
-
为什么苹果要完全屏蔽第三方 Cookie?
为什么苹果要完全屏蔽第三方 Cookie?
-
活久见,今天让我碰到疑似面试作弊的人了……
活久见,今天让我碰到疑似面试作弊的人了……
-
将划词翻译迁移到火狐浏览器
将划词翻译迁移到火狐浏览器
-
v-for 的时候不一定要写 key
v-for 的时候不一定要写 key
-
Vue.js 小窍门
Vue.js 小窍门
-
Framework7 Vue 踩坑记录
Framework7 Vue 踩坑记录
-
如何得知我的网页是被哪个站点嵌入的?
如何得知我的网页是被哪个站点嵌入的?
-
MongoDB 中的索引和 Mongoose 中的 autoIndex
MongoDB 中的索引和 Mongoose 中的 autoIndex
-
sessionStorage 的数据会在同一网站的多个标签页之间共享吗?这取决于标签页如何打开
sessionStorage 的数据会在同一网站的多个标签页之间共享吗?这取决于标签页如何打开
-
在 macOS 上通过代理使用 ssh 登陆服务器
在 macOS 上通过代理使用 ssh 登陆服务器
-
使用 root 用户登陆到腾讯云的主机
使用 root 用户登陆到腾讯云的主机
-
记一次网络错误的解决过程
记一次网络错误的解决过程
-
在 TypeScript 中定义 Mongoose 的 Schema、Model 与 Document
在 TypeScript 中定义 Mongoose 的 Schema、Model 与 Document
-
将 echarts 跑在 Node.js 服务器上
将 echarts 跑在 Node.js 服务器上
-
在 Docker 中运行 Node.js 应用
在 Docker 中运行 Node.js 应用
-
于是我从 WebStorm 转向了 VS Code
于是我从 WebStorm 转向了 VS Code
-
Chrome 扩展程序中内容脚本与 DOM 树
Chrome 扩展程序中内容脚本与 DOM 树
-
TypeScript、Rollup 与 ts-node
TypeScript、Rollup 与 ts-node
-
介绍一些免费好用的静态网站托管服务
介绍一些免费好用的静态网站托管服务
-
使用缓动函数制作更自然的动画
使用缓动函数制作更自然的动画
-
让 WebStorm 支持高亮 <style> 标签内的 SCSS/Sass 语法
让 WebStorm 支持高亮 <style> 标签内的 SCSS/Sass 语法
-
请锁定 package.json 里的模块版本号
请锁定 package.json 里的模块版本号
-
为什么应该避免修改内置对象的原型链?
为什么应该避免修改内置对象的原型链?
-
奇怪的缓存策略
奇怪的缓存策略
-
检测设备是否是水平状态
检测设备是否是水平状态
-
在 Webpack 中分离 vendor 与 app
在 Webpack 中分离 vendor 与 app
-
Babel 处理过的代码到底是什么样子的?当 Presets 遇到了 transfrom-runtime……
Babel 处理过的代码到底是什么样子的?当 Presets 遇到了 transfrom-runtime……
-
transform-runtime 会自动应用 polyfill,即便没有使用 babel-polyfill
transform-runtime 会自动应用 polyfill,即便没有使用 babel-polyfill
-
重读了一遍 Vue.js 的文档
重读了一遍 Vue.js 的文档
-
你不知道的 JSON.parse() 与 JSON.stringify()
你不知道的 JSON.parse() 与 JSON.stringify()
-
更友好的操作 localStorage 与 sessionStorage
更友好的操作 localStorage 与 sessionStorage
-
addEventListener 的第二个参数还可以是一个对象
addEventListener 的第二个参数还可以是一个对象
-
手机浏览器在后台运行时会阻塞 JavaScript 进程
手机浏览器在后台运行时会阻塞 JavaScript 进程
-
Web App 里的渐进增强
Web App 里的渐进增强
-
单元测试与依赖注入(dependency injection)
单元测试与依赖注入(dependency injection)
-
在 Windows 系统下安装 Node.js 时出现权限问题时的解决方案
在 Windows 系统下安装 Node.js 时出现权限问题时的解决方案
-
保护样式王国不受侵犯
保护样式王国不受侵犯
-
Rollup 与 Webpack
Rollup 与 Webpack
-
检测一个 USB 设备的 vendor ID 与 product ID
检测一个 USB 设备的 vendor ID 与 product ID
-
NPAPI 的替代方案:Chrome Apps
NPAPI 的替代方案:Chrome Apps
-
安装 node-sass 的正确姿势
安装 node-sass 的正确姿势
-
代码模块化:<script>、RequireJS、Browserify 与 webpack
代码模块化:<script>、RequireJS、Browserify 与 webpack
-
你好,Vue.js
你好,Vue.js
-
看来不应该全局安装 Node.js 模块
看来不应该全局安装 Node.js 模块
-
划词翻译、单元测试与测试覆盖率
划词翻译、单元测试与测试覆盖率
-
该不该用 NPM 替代 Bower?
该不该用 NPM 替代 Bower?
-
ES6 中的隐形“坑”
ES6 中的隐形“坑”
-
改用 WebStorm 编译 es6 与 scss 文件
改用 WebStorm 编译 es6 与 scss 文件
-
Ionic 与 Onsen UI
Ionic 与 Onsen UI
-
SASS 中的 @extend、@mixin 与重复的 css 片段
SASS 中的 @extend、@mixin 与重复的 css 片段
-
PhoneGap 中的 FileSystem
PhoneGap 中的 FileSystem
-
给 angularjs-requirejs-rjs-md5 加上 cdn 前缀的功能
给 angularjs-requirejs-rjs-md5 加上 cdn 前缀的功能
-
算法之美
算法之美
-
在 Protractor 中使用 $httpBackend
在 Protractor 中使用 $httpBackend
-
Protractor 测试环境搭建过程
Protractor 测试环境搭建过程
-
在 AngularJS 中按需加载控制器、指令、服务与样式
在 AngularJS 中按需加载控制器、指令、服务与样式
-
你好,AngularJS
你好,AngularJS
-
将组件合并成一个文件
将组件合并成一个文件
-
登录进 NPM 花了我两个小时
登录进 NPM 花了我两个小时
-
使用 gulp-rev-all 来解决 RequireJS 的增量更新问题
使用 gulp-rev-all 来解决 RequireJS 的增量更新问题
-
F.I.S 前瞻
F.I.S 前瞻
-
Gulp 与 Grunt
Gulp 与 Grunt
-
RequireJS与网站结构
RequireJS与网站结构
-
初试 PhoneGap
初试 PhoneGap