首页

最近更新.rss.xml

ai 就会开始自行探索思源笔记内容了,得益于思源开放的 api 以及内置了 sqlite 来做笔记索引,所以甚至 ai 是能自行构造复杂 sql 来精准查询我们所想要的内容。(感谢 Frostime 提供的 sql 小助手提示词
思源笔记 很好用,在这个ai时代他会变得更好用,项目 git 地址:https://github.com/2234839/siyuan-notes-skill.git
思源笔记 很好用,在这个ai时代他会变得更好用,项目 git 地址:https://github.com/2234839/siyuan-notes-skill.git

三分钟上手

安装在对应的支持 skill 功能的 ai 工具 skills 目录下,这里以 claude code skills 为例:
bash
# 1. 克隆 cd ~/.claude/skills git clone https://github.com/2234839/siyuan-notes-skill.git siyuan-notes # 3. 配置 cp .env.example .env # 编辑.env,填入思源的API Token
安装在对应的支持 skill 功能的 ai 工具 skills 目录下,这里以 claude code skills 为例:
安装在对应的支持 skill 功能的 ai 工具 skills 目录下,这里以 claude code skills 为例:

常见问题

Q: 会改我的笔记吗? A: 完全不会,只读不写
Q: 支持哪些思源版本? A: 所有提供API的版本
Q: 移动端能用吗? A: 只要能访问思源API接口就行

使用示例

直接对Claude code说:查询我的笔记总结我这段时间除了工作主要探索了什么
ai 就会开始自行探索思源笔记内容了,得益于思源开放的 api 以及内置了 sqlite 来做笔记索引,所以甚至 ai 是能自行构造复杂 sql 来精准查询我们所想要的内容。(感谢 Frostime 提供的 sql 小助手提示词
直接对Claude code说:查询我的笔记总结我这段时间除了工作主要探索了什么
bash
# 1. 克隆 cd ~/.claude/skills git clone https://github.com/2234839/siyuan-notes-skill.git siyuan-notes # 3. 配置 cp .env.example .env # 编辑.env,填入思源的API Token
Q: 会改我的笔记吗? A: 完全不会,只读不写
Q: 支持哪些思源版本? A: 所有提供API的版本
Q: 移动端能用吗? A: 只要能访问思源API接口就行

最近实践

notehttps://z2h.cn/hanzi 字帖生成网站,田字格
note​ amd 利用 npu 的办法:https://ryzenai.docs.amd.com/en/latest/inst.html https://lemonade-server.ai/ https://github.com/amd/gaia?tab=readme-ov-file 主要还是 lemonade-server ,gaia 也是连接的 gaia (直接安装 gaia 会自动安装 lemonade-server
好文推荐https://vue-bits.dev/ 非常绚酷的 vue 动画库
好文推荐​ 浏览器插件开发最佳实践 https://wxt.dev/guide/installation.html
powertoys 用于窗口置顶(例如操作浏览器和编码无需切换窗口(置顶vscode)),还有许多的实用功能
html
所有不安全引用应当采用 Subresource_Integrity 子资源完整性校验
应用开发 : https://neutralino.js.org/docs/getting-started/your-first-neutralinojs-app js跨平台图形界面软件开发方案,方便打包单文件应用
应用开发 : https://neutralino.js.org/docs/getting-started/your-first-neutralinojs-app js跨平台图形界面软件开发方案,方便打包单文件应用
应用开发 : https://neutralino.js.org/docs/getting-started/your-first-neutralinojs-app js跨平台图形界面软件开发方案,方便打包单文件应用

我的订阅列表

文章摘要后侧文本是我的笔记
崮生精选 : 如果你都看到这里了,不妨订阅一下我的精选博客吧

一些我关注的信息列表or文章

技术

ean1.cn

export CONFIG_FILE="config-ean1.cn.ts" export DATABASE_URL="file://root/app/tuchuang/prisma/dev-ean1.cn.db?connection_limit=1&socket_timeout=10" pm2 start "node --enable-source-maps ./dist/index.cjs" --name "TsFullStack"

工具收藏

数据库: pocketbase 低代码快速开发
请求mock:pocket-mocker 我以前也想过做这种的mock。
inngest 可扩展、低延迟、事件驱动的持久执行平台。 支持部署到无服务器、服务器或边缘的功能。
智能配置加载器 ts文件作为配置
请求mock:pocket-mocker 我以前也想过做这种的mock。
主要应用场景:嵌入各个网站,让原有网站在简单改造后即可拥有ai对话以及 agent 自动化操作能力,例如表单填写,数据筛选提取。网站只需声明一些tools,以及配置一些提示词。

effect 速查手册

使用 runPromise 运行程序
可以使用 Context.empty().pipe(Context.add(...),...) 这样的方式组合多个依赖,然后尽量将依赖拆分的更细一些,这样方便执行小段程序而不用注入大而全的依赖

依赖处理

每个具体的依赖被称为 service ,service 的集合就是 context 。
然后每个 service 都不应该直接依赖其他 service ,可以通过 Effect.Service​ 来声明 service 依赖(这里很有意思,相当于也是一种依赖倒置,本来 service 的架构已经是依赖倒置的典范了,所以可以称之为二阶依赖倒置?
然后一个 provide 了service 值的 effect 对象一般加 live 后缀。
program.pipe(Effect.provide(OpenAIConfigService.Default));​ 可以通过这样的形式来为 program 提供对应的依赖注入
然后一个 provide 了service 值的 effect 对象一般加 live 后缀。
然后每个 service 都不应该直接依赖其他 service ,可以通过 Effect.Service​ 来声明 service 依赖(这里很有意思,相当于也是一种依赖倒置,本来 service 的架构已经是依赖倒置的典范了,所以可以称之为二阶依赖倒置?

node 版本管理

fnm(推荐使用) :全平台 / 通过二进制安装 node
bash
# 第一次使用 fnm 时需要安装 winget install Schniz.fnm ## 或者windows 使用 scoop 安装 scoop install fnm # configure fnm environment fnm env --use-on-cd | Out-String | Invoke-Expression ## 之后直接使用对应版本就行 fnm use v24.0.1 # 修改默认使用什么版本 fnm default v24.0.1 # 查看node版本是否生效 node -v # 启用 pnpm corepack enable pnpm # 方法1:全局启用脚本(推荐) pnpm config set enable-pre-post-scripts true # 查看pnpm 版本是否生效 pnpm -v
配置 powershell env https://github.com/Schniz/fnm?tab=readme-ov-file#powershell
配置 powershell env https://github.com/Schniz/fnm?tab=readme-ov-file#powershell
program.pipe(Effect.provide(OpenAIConfigService.Default));​ 可以通过这样的形式来为 program 提供对应的依赖注入

背景

随着 vite-node 宣布完成使命并推荐使用 Vite 原生的 Environment API,以及 tsx 等传统方案在 Vite 项目中的局限性,我们探索并实现了一种基于 Vite Environment API 的 TypeScript 运行时方案。
随着 vite-node 宣布完成使命并推荐使用 Vite 原生的 Environment API,以及 tsx 等传统方案在 Vite 项目中的局限性,我们探索并实现了一种基于 Vite Environment API 的 TypeScript 运行时方案。

核心思路

利用 Vite 的 ssrLoadModule​ API,创建临时的 Vite 服务器实例来即时编译和执行 TypeScript 文件,无需预先编译步骤。
利用 Vite 的 ssrLoadModule​ API,创建临时的 Vite 服务器实例来即时编译和执行 TypeScript 文件,无需预先编译步骤。

实现方案

核心代码

javascript
#!/usr/bin/env node import { createServer } from 'vite' /** * 使用 Vite 运行 TypeScript 文件 */ async function runTypeScriptFile(filePath) { // 创建 Vite 服务器 const server = await createServer({ configFile: false, // 不使用配置文件,简化设置 server: { hmr: false }, // 禁用 HMR optimizeDeps: { noDiscovery: true, include: undefined }, // 禁用依赖优化 clearScreen: false, logLevel: 'silent', // 静默模式 }) try { // 使用 Vite 的 SSR 功能加载并执行模块 await server.ssrLoadModule(filePath) } finally { // 清理资源 await server.close() } } /** * CLI 主函数 */ async function main() { const args = process.argv.slice(2) if (args.length === 0) { process.exit(1) } const filePath = args[0] try { await runTypeScriptFile(filePath) } catch (error) { process.exit(1) } } // 运行主函数 main().catch(() => {})
javascript
#!/usr/bin/env node import { createServer } from 'vite' /** * 使用 Vite 运行 TypeScript 文件 */ async function runTypeScriptFile(filePath) { // 创建 Vite 服务器 const server = await createServer({ configFile: false, // 不使用配置文件,简化设置 server: { hmr: false }, // 禁用 HMR optimizeDeps: { noDiscovery: true, include: undefined }, // 禁用依赖优化 clearScreen: false, logLevel: 'silent', // 静默模式 }) try { // 使用 Vite 的 SSR 功能加载并执行模块 await server.ssrLoadModule(filePath) } finally { // 清理资源 await server.close() } } /** * CLI 主函数 */ async function main() { const args = process.argv.slice(2) if (args.length === 0) { process.exit(1) } const filePath = args[0] try { await runTypeScriptFile(filePath) } catch (error) { process.exit(1) } } // 运行主函数 main().catch(() => {})

使用方式

1. 作为项目脚本

bash
# 保存为 run-ts.js node run-ts.js src/example.ts # 或在 package.json 中添加命令 { "scripts": { "run": "node run-ts.js" } }
bash
# 保存为 run-ts.js node run-ts.js src/example.ts # 或在 package.json 中添加命令 { "scripts": { "run": "node run-ts.js" } }

2. 命令行使用

bash
pnpm run run src/example.ts
bash
pnpm run run src/example.ts

技术优势

与现有方案对比

特性tsxvite-nodeVite Runner (我们的方案)
安装npm install tsxnpm install vite-node内置 Vite
配置简单简单极简
性能良好良好优秀
插件生态有限Vite 插件完整 Vite 生态
未来支持持续维护已废弃官方推荐方向
项目一致性独立工具独立工具与 Vite 项目完全一致
特性tsxvite-nodeVite Runner (我们的方案)
安装npm install tsxnpm install vite-node内置 Vite
配置简单简单极简
性能良好良好优秀
插件生态有限Vite 插件完整 Vite 生态
未来支持持续维护已废弃官方推荐方向
项目一致性独立工具独立工具与 Vite 项目完全一致

核心特性

零配置: 无需额外配置即可运行 ✅ 类型安全: 完整的 TypeScript 支持 ✅ ESM 支持: 现代 ES 模块语法 ✅ 异步支持: 支持 async/await ✅ 依赖解析: 自动解析 node_modules 依赖 ✅ 静默执行: 无多余日志输出 ✅ Vite 生态: 完全兼容 Vite 插件和配置
零配置: 无需额外配置即可运行 ✅ 类型安全: 完整的 TypeScript 支持 ✅ ESM 支持: 现代 ES 模块语法 ✅ 异步支持: 支持 async/await ✅ 依赖解析: 自动解析 node_modules 依赖 ✅ 静默执行: 无多余日志输出 ✅ Vite 生态: 完全兼容 Vite 插件和配置

适用场景

最佳使用场景

Vite 项目: 已经使用 Vite 构建的项目
开发工具: 需要使用 Vite 插件生态的脚本
统一工具链: 希望运行时和构建时使用相同工具
复杂插件需求: 需要 Vue、React、CSS 预处理器等支持
Vite 项目: 已经使用 Vite 构建的项目
开发工具: 需要使用 Vite 插件生态的脚本
统一工具链: 希望运行时和构建时使用相同工具
复杂插件需求: 需要 Vue、React、CSS 预处理器等支持
Vite 项目: 已经使用 Vite 构建的项目
Vite 项目: 已经使用 Vite 构建的项目
开发工具: 需要使用 Vite 插件生态的脚本
开发工具: 需要使用 Vite 插件生态的脚本