使用js开发一个快速打开前端项目的alfred插件
使用js开发一个快速打开前端项目的插件
目录
前言
一直以来开发都是先打开vscode,然后选择项目,在项目多的情况下会觉得挺繁琐;如果同时打开了许多vscode窗口,寻找目标窗口也比较麻烦,于是萌生了开发一个alfred的工作流插件的想法,目标是在alfred搜索框可以通过code命令直接打开指定的项目。
使用的技术栈
作为前端一枚,当然要使用js来开发,社区有成熟的js开发方案:alfy , alfy可以将工作流插件发布到npm,然后通过安装npm包安装alfred工作流插件。
最新版的alfy要求使用es模块开发,并且使用了alfy相当于要求用户电脑上是安装nodejs,并且版本最好>=16
步骤
首先在alfred中创建一个空白workflow,位置目录
/Users/xxx/Library/Application\ Support/Alfred/Alfred.alfredpre ferences/workflows/。直接在默认的工作流目录开发有两个问题,一是开发目录和安装目录冲突,二是不适合使用git作为版本控制,为了更好的开发维护,将创建的工作流文件夹复制到自己常用的工作目录。现在项目的位置变了,如何实时开发预览呢?解决方案:通过创建软连接的方式把项目目录链接到alfred工作流插件目录。在mac中,就是使用ln 命令创建软连接。
// 创建软链接
ln -s /Users/name/xinyu-alfred-open-in-vscode /Users/name/Library/Application\ Support/Alfred/Alfred.alfredpreferences/workflows/xinyu-alfred-open-in-vscode
// 删除软链接
unlink /Users/name/Library/Application\ Support/Alfred/Alfred.alfredpreferences/workflows/xinyu-alfred-open-in-vscode后来发现alfy是提供了
alfy-link命令,该命令可以直接创建软链接。alfred-link
alfred-unlink需要注意,mac 中创建
替身目录和软链接并不相同,在这里使用替身无法生效。然后就是开发工作流,先添加一个script filter,需要配置执行的脚本和唤起命令,这里使用vscode的默认命令,外加加一个空格

先通过环境变量获取用户指定的目录,这些目录可以在插件中设置,然后获取目录下的所有文件夹并在alfred中展示出来。alfy封装的api足够使用了。
添加打开vscode的逻辑,在这一步中调用bash执行命令,此处执行的是
code命令,然后在vscode中打开指定的项目。
最终产品展示

问题发现
因为需要在删除包之后可以自动删除alfred的工作流下面的软连接,所以按照alfy的文档添加了preuninstall钩子,然后在真正卸载npm包的时候却发现软连接没有被删除,最后发现preuninstall在npm7之后就不支持了。所以目前如果删除插件后,需要手动在alfred中删除插件。
待优化
- 使用LRU算法将常打开项目尽量放置到前面
最后分享一下包名: xinyu-alfred-open-in-vscode
使用js开发一个快速打开前端项目的alfred插件的更多相关文章
- 一个电商项目的Web服务化改造
一个电商项目的Web服务化改造 项目,早期是随便瞎做的,没啥架构,连基本的设计也没. 有需求,实现需求,再反复修改. 大致就是这么做的. 最近,项目要重新架构,和某boss协商的结果是,采用阿里开源的 ...
- 前端每日实战:116# 视频演示如何用 CSS 和原生 JS 开发一个监控网络连接状态的页面
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oPjWvw 可交互视频 此视频是可 ...
- 如何用原生js开发一个Chrome扩展程序
原文地址:How to Build a Simple Chrome Extension in Vanilla JavaScript 开发一个Chrome扩展程序非常简单,只需要使用原生的js就可以完成 ...
- 使用node.js开发一个生成逐帧动画小工具
在实际工作中我们已经下下来不下于一万个npm包了,像我们熟悉的 vue-cli,react-native-cli 等,只需要输入简单的命令 vue init webpack project,即可快速帮 ...
- 用Vue.js开发一个电影App的前端界面
我们要构建一个什么样的App? 我们大多数人使用在线流媒体服务(如Netflix)观看我们最喜欢的电影或者节目.这篇文章将重点介绍如何通过使用vue.js 2 建立一个类似风格的电影流媒体WEB交互界 ...
- 《Node入门》读书笔记——用Node.js开发一个小应用
Android APP的开发告一段落,一个稳定的.实现了基本功能的APP已经交付用户使用了!我和老板交流了下,接下来准备转战Node.js了,而且一部分前端的功能也要做进去!哈哈哈~~~接下来要朝一个 ...
- maven(四):一个基本maven项目的pom.xml配置
继续之前创建的test项目,一个基本项目的pom.xml文件,通常至少有三个部分 第一部分,项目坐标,信息描述等 <modelVersion>4.0.0</modelVersion& ...
- 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过. 可以在这里看到相关的 ...
- 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 本篇,以我亲自画的3个图,阐述一下架构设计. 一.分层架构-总体图 ...
- 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题. 或者说是,本篇的基本 ...
随机推荐
- 02.详解盒子模型&选择器初识
1.Div盒子 用div做圆 能否优化,去掉div之间的距离?margin属性 用表格做圆 2.CSS样式 总结:需要注意的是行级标签设置宽高不会生效 小练习:使用span标签 3.CSS选择器演示及 ...
- C/CPP在命令行中生成DLL文件
简单的写一个C调用DLL(动态链接库)的例子. 创建3个.c文件备用 test.c 1 #include <stdio.h> 2 3 //这里声明,表示来自dll文件. 4 extern ...
- KeilMDK制作FlashDriver
一.前言 ①在ECU OTA 程序升级过程中,需要执行一段比较特殊的代码,这段代码实现对自身flash的擦除与写入,又称flash driver:②为了安全的考虑,会尽可能的避免在代码中固化有对fla ...
- ESP8266-01S烧录固件
ESP8266-01S 整理了一下ESP01S的烧录固件和烧录APP 链接:https://pan.baidu.com/s/1DApOQcWhqvk378ZklJSypA 提取码:1028 文件夹包含 ...
- C#/VB.NET:快速而简单的免费SVG到PDF转换技巧
在日常工作中,我们常常需要将SVG转换为PDF格式.这是因为SVG格式的图像在打印时可能会出现问题,例如失去分辨率或无法正确适应纸张大小.与此相比,PDF格式则专门用于打印和共享文档,可以确保高质量输 ...
- MySQL锁表解锁表
CREATE TABLE t1 ( id int(11) NOT NULL, val varchar(10) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoD ...
- CocosCreator基础
跳转到底部 目录 CocosCreator项目结构: 资源文件夹(assets) 资源库(library) 本地设置(local) 项目设置(settings) project.json 构建目标(b ...
- iostream,iostream.h,stdio.h的纠葛
include <iostream.h>非标准输入输出流 include 标准输入输出流 C++中为了避免名字定义冲突,特别引入了"名字空间的定义",即namespac ...
- Vue: 配置axios基准路径并使用
配置 main.js文件修改 在main.js中进行如下修改 // 设置axios全局api import axios from 'axios' // 请求基准路径的配置 后台 axios.defau ...
- Java 生态需要新鲜的血液、需要狂飙的刺激。Solon v2.4.1 发布
Solon 是什么开源项目? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢 ...