需求描述

想使用 Alfred 快速添加笔记到思源笔记的收集箱。
网上关于此类的教程实在是少的可怜,过程中遇到很多看似简单,但真的不知道应该如何处理的小问题,这篇教程不成体系,只是对解决问题过程的一些碎片化知识进行记录。

好用的库

探索过程中发现了两个好用的库,分别是GitHub - sindresorhus/alfy: Create Alfred workflows with easeGitHub - giangvo/alfred-workflow-nodejs: A small library providing helpers to create Alfred Workflow ,最后功能的实现我使用的是 alfy。

使用 Alfy 创建一个 workflow

安装

  1. npm install alfy

使用

  1. 创建一个空的 Alfred workflow

Alfred → 设置 → Workflows → 点击底部加号 → Blank workflow

使用 NodeJS 编写 Alfred Workflow - 图1

  1. 添加一个 Keyword 关键词触发器

空白处右键 → Inputs → Keyword

使用 NodeJS 编写 Alfred Workflow - 图2

触发关键词设置为 sybj,Title 处添写发送{query}到思源,这里的 Title 内容会显示在输入框的下方,{query}会被替换成我们输入的内容。

使用 NodeJS 编写 Alfred Workflow - 图3

  1. 创建一个 Run Script 的方法

空白处右键 → Actions → Run Script

使用 NodeJS 编写 Alfred Workflow - 图4

将语言设置为 /bin/bash ,其他选项如图,然后将下方代码填入Script 处

使用 NodeJS 编写 Alfred Workflow - 图5

  • with input as {query}:将输入存储成一个变量
  • 脚本部分的意思是运行一个 index.js 脚本,然后将 {query} 的值传过去
  1. 创建一个 Post Notification 弹窗

空白处右键 → Outputs → Post Notification

将 Title 设置为 {query},我们就能接收到从上一个模块传递过来的值,将其作为弹窗的标题内容

使用 NodeJS 编写 Alfred Workflow - 图6

  1. 我们将这三个模块用线连接起来,数据就可以在它们中间传递了

Keywork 输出的值将传递给 Run Script 作为输入,同样的,Run Script 的输出值将传递给 Post Notification 作为输入

使用 NodeJS 编写 Alfred Workflow - 图7

  1. 打开这个 workflow 的文件夹

在 workflow 上右键 → Open in Finder

使用 NodeJS 编写 Alfred Workflow - 图8

  1. 我们使用 VSCode 打开这个文件夹,然后打开终端,输入 npm init 进行项目初始化
  2. 在 package.json 中添加 "type": "module"
  3. 在项目中安装 Alfy,npm install alfy
  4. 在项目根目录创建一个index.js 文件,然后将afly引用即可使用

项目经验

脚本对外如何输出一个值

使用 console.log('🎉 发送成功!') 即可输出一个值,传递给下一个模块
下一个模块使用 {query} 即可接收‍

如何获取在 Workflow 中设置的环境变量

使用 process.env['TOKEN'] 即可以获取环境变量‍

如何避免输入文字过程中多次发送请求

我最开始是直接使用的 Script Filter 模块,就是将输入和运行脚本放在一起设置,出现了的问题就是在输入文字的过程中会多次执行脚本发送请求,解决方法是将输入和执行脚本分开,使用 Keywork 模块进行文字输入,然后将值传递给 Run Script ,再运行脚本。