掘金 阅读 ( ) • 2024-04-18 13:52

🧑‍💻 写在开头

事情的起因是因为我最近在做的一个新项目,业务需求的优先级大于基建并且和旧项目挂钩,需要使用到旧项目的基础能力,现在是类似使用了微前端的技术做了隔离,就有很多个项目,还没时间也没人做monorepo,公司给的电脑配置也不高,每天都要重启,导致我每天得用vscode挨个打开项目,挨个启动,忒烦人了,实在是忍不了了。

所以,我简单看了下有没有一键帮我跑所有项目的这种方式,找到了alfred,可以做工作流,能够做到用快捷键触发一个工作流,工作流可以写脚本帮我打开vscode并且启动项目,下面简单记录一下实现。

🥑 效果如下

2024-04-17 23.11.22.gif

🧑‍💻☀️🍐🍎🍑🍉🍒🥑🥝

一、alfred工作流简单理解

工作流(Workflows)是Alfred一个非常核心的特性。工作流允许用户创建一系列自定义的动作,完成复杂的任务,从而极大增强了Alfred的功能性和适应性。

1.工作流的组成部分

工作流通常由以下几种元素组成:

  • 触发器(Triggers) : 这些组件用于启动工作流。它们可以是热键、关键词、联系人操作、系统事件等。
  • 动作(Actions) : 当触发器被触发后,动作定义了实际执行的任务。动作可以是打开文件、运行脚本、控制系统等。
  • 输入(Inputs) : 用户输入的数据,可以通过查询传递给工作流进行进一步处理。
  • 输出(Outputs) : 显示信息、经过处理的查询结果、通知等。
  • 连接器(Connectors) : 这些线条连接触发器、动作、输入和输出,定义了工作流中的数据流向和逻辑流程。

2.工作流的功能

能干的就多了,这篇文章就是一个很好的例子

  • 执行常用的操作,例如快速发送邮件、搜索内容、管理窗口和标签等。
  • 自动化复杂的任务,如一键上传图片、格式化数据、批量重命名文件等。
  • 与外部应用程序和服务集成,如控制音乐播放、提交代码到git、连接到家庭自动化设备等。
  • 快速访问常用的文档、文件夹和网址。
  • 利用自定义的Shell脚本、AppleScript、JavaScript和其他语言的脚本扩展功能。

二、实操-实现自动打开vscode启动项目

这里是可以仅用一个工作流就实现同时打开多个项目的,但是下面我们想介绍一下工作流如何调用其他工作流,所以我们这里分开,并且如果我只想打开一个项目也可以直接用。

1.创建工作流打开A项目

首先我们创建一个工作流

image.png

增加一个快捷键触发,录制你喜欢的快捷键,我这里随便录制一个,保存。

image.png

image.png

增加一个打开文件,使用vscode打开,从访达拖入即可,左边是文件夹,右边是使用哪个应用打开,保存,连接起来

image.png

image.png

image.png

我们增加一个run script跑一个脚本让vscode新建一个终端,然后执行项目启动命令,然后切换到全屏

脚本如下:

image.png

#!/bin/zsh

# 等待VSCode启动
sleep 2

# 使用osascript运行AppleScript来在VSCode中打开终端,运行命令,然后切换全屏
osascript <<END
tell application "Visual Studio Code"
    activate
    tell application "System Events"
        keystroke "\`" using {control down, shift down} # 创建新终端
        delay 3 # 等待一小段时间让终端准备就绪,确保命令能被正确输入
        keystroke "f" using {control down, command down} # 切换到全屏模式
 	    delay 3 # 等待命令执行,需要时可以适当增长这个时间
        keystroke "yarn start" # 输入你的启动命令
        delay 3 # 等待输入完成
        keystroke return # 按回车键执行命令
        
    end tell
end tell
END

到这里就已经可以打开启动项目了,效果如下

2024-04-17 23.34.43.gif

2.创建工作流打开项目B

同A的创建流程

3.如何使用一个工作流同时触发A、B的工作流

主要是将需要被调用的工作流设置一个被调用工作流的External Trigger,然后在调用的地方使用Call External触发其他工作流

A、B都设置被调用流

image.png

image.png

在主工作流中设置触发其他工作流,这里的这个trigger id就是我们上面设置的触发id

image.png

image.png

这样就实现了文章开头的效果,这只是一个简单的demo,但是给了我们无限想象,你可以编写脚本实现任何你想要自动化的工作流,大部分都是有解决方案的,比如自动切换hosts,自动切换wifi等。

🍎 推荐阅读

工程化系列

本系列是一个从0到1的实现过程,如果您有耐心跟着实现,您可以实现一个完整的react18 + ts5 + webpack5 + 代码质量&代码风格检测&自动修复 + storybook8 + rollup + git action实现的一个完整的组件库模板项目。如果您不打算自己配置,也可以直接clone组件库仓库切换到rollup_comp分支即是完整的项目,当前实现已经足够个人使用,后续我们会新增webpack5优化、按需加载组件、实现一些常见的组件封装:包括但不限于拖拽排序、瀑布流、穿梭框、弹窗等

面试手写系列

🍋 写在最后

如果您看到这里了,并且觉得这篇文章对您有所帮助,希望您能够点赞👍和收藏⭐支持一下作者🙇🙇🙇,感谢🍺🍺!如果文中有任何不准确之处,也欢迎您指正,共同进步。感谢您的阅读,期待您的点赞👍和收藏⭐!

感兴趣的同学可以关注下我的公众号ObjectX前端实验室

🌟 少走弯路 | ObjectX前端实验室 🛠️「精选资源|实战经验|技术洞见」