大部分的现代 Web 开发框架,都需要启动一个进程,然后当你改了什么东西的时候,它就自动 build 或者重启。
所以我们为了自己每天的需求,做了一个管理工具 CodeLauncher ,用来启动那些本地开发时需要的各种进程,及查看其输出:
进程启动之后,右键菜单上会提供一些常用的功能:
--port
之类的关键字的话)在添加项目的时候,可以指定执行文件的绝对路径。如果没有指定绝对路径,那么会从当前的 PATH 中去猜。及指定工作目录和环境变量。
最新版本的下载和源代码欢迎访问项目网站 cl.v2ex.pro
Update 1.0.1 released on Jan 7, 2022
1
airyland 2022-01-03 19:50:42 +08:00 1
赞。如果可以从 menubar 快捷查看和操作可能会更方便。
|
4
leaves615 2022-01-03 19:59:44 +08:00 1
非常棒。做的很漂亮,我也写了一个差不多的。不过没有你写的漂亮。
|
5
xstmjh123 2022-01-03 20:37:16 +08:00
感觉像 PM2 的 UI 版?
|
7
fyibmsd 2022-01-03 21:42:23 +08:00 2
可以支持下导入 brew services 吗
|
8
chenkali 2022-01-03 23:23:23 +08:00 2
能否 调整最低支持版本 macos 10.X ? 好像必须是 macos 11 ?
|
9
mcfog 2022-01-04 08:53:57 +08:00 via Android 1
之前一直用的 https://github.com/cortesi/modd 建议参考核心需求:
pattern match 修改什么文件重启 多个进程一组管理(常见:前端+后端+反代) 配置导出文本格式 /导入 之前命令行的痛点主要是输出日志混在一起,然后就是只能整组启停不能临时 disable 导致经常不必要地重启 webpack |
10
Livid MOD OP @mcfog
CodeLauncher 支持把一个项目里的多个不同的进程配置在一个 Project 里。然后点击上面的进程或者下面的下拉列表就可以切换看输出,比如这是在一个 Python Flask 项目里,主进程和一个按需运行的 pytest 进程: |
12
Livid MOD OP @chenkali 这个我们试试。因为是用 SwiftUI 写的,所以如果用户端的 macOS 版本比较新的话,就可以支持很多 SwiftUI 的新功能。
|
13
Livid MOD OP @mcfog 观察一个目录里的文件更改,然后 process manager 来重启进程这个目前 CodeLauncher 还没有实现。我们目前主要是在用 CodeLauncher 来启动已经具有这类行为的框架,比如 Flask ,Zola 等等。
自身支持文件观察然后重启进程这个接下来我们研究一下。 你目前在开发什么的时候会需要用到这样的场景? |
14
mcfog 2022-01-04 11:27:55 +08:00 via Android 1
@Livid golang 项目,PHP 的 swoole/workerman 之类非 fpm 的项目,包括 node 项目为了统一方案我都会用 modd 来管
|
15
hccsoul 2022-01-04 11:36:11 +08:00 2
Hope to add Chinese support
|
16
orqzsf1 2022-01-04 11:46:10 +08:00
mark ,我也想做一个类似的。。今天就看到了
|
17
Livid MOD OP @mcfog 所以,比如 golang 项目就是,目录里如果符合某个 pattern 的文件发生变更了,就跑一个 build 指令。然后这个 build 指令是那种跑完就退出,不会一直运行的?
|
18
Buges 2022-01-04 13:00:46 +08:00 via Android 1
@Livid #17 这种需求可以直接内置一个 watchexec ,不需要自己再实现一遍了。另外对 golang 而言是有专门的 hot reload 工具的 https://github.com/cosmtrek/air 。
|
19
AilF 2022-01-04 13:29:41 +08:00
点赞,试用看看
|
20
abigeater 2022-01-04 13:42:39 +08:00
回家试用下。
经常在终端里起了程序后忘记结束进程再关闭终端,然后只能手动通过 PID kill 掉。 |
21
mcfog 2022-01-04 17:37:20 +08:00 1
@Livid
以 modd 的能力来说两种都支持,你说的在 modd 里叫 prep 一般放 linter 、build 、test 之类的,失败有输出警告,有变更时会重新执行; 而另一种是持续不退出,有变更时重启就是 daemon 了,总之大概的意思是类似这样 { daemon: caddy run // 反向代理 } Caddyfile { prep: caddy reload // 变更时 reload } backend/**/*.go { indir: ./backend prep: go test // 后端 test daemon: go run // 后端 server } frontend/**/*.js { indir: ./frontend prep: npm run lint // 前端 linter daemon: npm start // 前端 server } 一般而言分发一长串 brew install (包括 modd 和各种 sdk )和这个文本文件,就能够在一个全新的系统上直接启动项目了 刚才试了一下,导出的 json 里的路径是绝对路径的会影响团队成员之间共享,发明一个.cl.json 之类的后缀,路径默认以这个后缀文件作为起点如何?甚至可以去注册打开方式直接双击导入。 另外 log 没有搜索或导出 |
23
guyskk0x0 2022-01-04 21:53:23 +08:00 1
有这个需求👍,试用了一下,提一点点建议~
- 创建 Task 的加号按钮不明显,不好找。 - 任务 executable 和 arguments 可以合并,也就是合并成 shell 命令。 - 启动和停止按钮可以合并成一个,类似音乐播放按钮。 - 未运行的状态用灰色更好,运行失败可以用红色。 - 创建新 Task 可以复用同项目 Task 的 Workdir 设置。 - 日志输出,解析 URL 并支持点击,类似 iTerm2 。 - 网站 favicon 没有设置。 - 可以考虑显示任务内存和 CPU 占用情况。 |
24
quxuanxuan 2022-01-05 16:50:25 +08:00 1
日志如果支持彩色就更好了
|
25
Livid MOD OP @guyskk0x0 在 2022 年 1 月 7 日的 1.0.1 更新中按照你的反馈使用了新的颜色系统:
* 绿色是运行中的状态 * 灰色是默认或者 clean exit * 红色是上次退出时 exit code 非 0 |
26
akira 2022-01-08 17:27:40 +08:00
看起来不错呢,windows 下类似的东西么
|
27
neochen13 2022-01-09 21:31:58 +08:00 via Android
发现新世界,试试看
|
28
oldhuhu 2022-01-10 18:31:11 +08:00 via Android 1
建议支持一下服务直接的依赖关系,只靠 delay 来确定启动顺序有点不可靠
|
29
xieyuheng 2022-01-11 20:50:32 +08:00 1
站长加油哇!
|
30
imxieke 2022-01-18 12:26:30 +08:00
可惜了 11.2.3 用不了
|
31
tangbao 2022-01-24 23:10:17 +08:00 1
|
32
D0n9 2022-01-27 18:28:15 +08:00
一直用 supervisor 来管理,这个和 supervisor 比 优势是啥
|
33
fenglangjuxu 2022-01-28 14:23:43 +08:00 1
@D0n9 #32
``` If you have used supervisor on Linux before, you will find the concept is quite similar. CodeLauncher works like a GUI version of supervisor for macOS, while the main goals are to make it easier to organize processes and check the output. ``` |
34
maxthon 2022-01-28 15:45:49 +08:00 1
开始用用看看~
提一个看到的小问题:log 不能跨行复制 |
35
liuzhaowei55 2022-02-18 09:32:25 +08:00 via iPhone
@Livid ngrok http 80 命令不能捕捉到运行状态,也无法正常启动
|
36
Livid MOD OP |
37
Livid MOD OP @liuzhaowei55 或者给我看一下你设置任务的那个界面的截图?
|
38
liuzhaowei55 2022-02-18 10:48:36 +08:00 via iPhone
@Livid ![Snipaste_2022-02-18_10-40-53.png]( https://w-img-pub.moorper.com/2022/02/18/7af93e36877e3.png)
配置上是比较简单的 |
39
Livid MOD OP @liuzhaowei55 你的 ngrok 的安装路径是?
|
40
liuzhaowei55 2022-02-18 10:51:40 +08:00 via iPhone 1
@liuzhaowei55 我重新试了一下,命令正常运行,但输出还是无法捕捉到
|
41
Livid MOD OP @liuzhaowei55 收到。我会在我的环境里试试是什么问题。
|
42
liuzhaowei55 2022-02-18 10:53:54 +08:00 via iPhone
@Livid 应该是和 ngrok 的信息输出有关,它是新起了一个类似 screen 这样的,然后输出
|
43
subpo 2022-02-24 15:07:31 +08:00
我的配置如图,点击 run 无法启动, 我的启动命令是这样的, 可能是我没有分清楚 executable path 和 arguments 的区别? alias auth="cd ~/xxxxx/auth_api ; git rev-parse --abbrev-ref H │ EAD; HASH_ENCRYPT_SALT_DB=xxxxx │ HASH_ENCRYPT_SALT_TRADE=xxxxxxx │ /usr/bin/env ./venv/bin/python ./src/auth-api.py runserver │ 8004 --settings=global_base.settings.local-my" |
44
Livid MOD OP @subpo Executable Path 是你的 Python 的绝对路径。比如 /usr/bin/python 这样的。如果你安装了自己的 Python ,那么可能是更长的一个路径。
然后 Arguments 是跟在 python 后面的所有参数。 比如这是我本地的一个 Tornado 项目的配置,供参考: |
45
WildCat 2022-05-24 08:49:13 +08:00
|
46
ahu 250 天前
|