试一下用 VersionFox 替代 asdf-vm? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hankli
V2EX    程序员

试一下用 VersionFox 替代 asdf-vm?

  •  1
     
  •   hankli
    aooohan 2024-01-11 10:26:58 +08:00 2266 次点击
    这是一个创建于 641 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先上演示

    asciicast

    这里有跟 asdf 的对比What is the difference with asdf?

    哎, 在利用 Shell Hook 机制之后,终于实现了对于作用域的支持.

    !!!!这多亏了direnv项目给了新思路, 牛逼!!

    目前已实现支持三种作用域:

    • Global: 全局生效
    • Project: 当前项目目录生效, 切换目录会自动切换环境
    • Session: 当前 shell 会话有效, 不影响其他 shell

    项目地址: https://github.com/version-fox/vfox

    喜欢就给个 star吧,

    8 条回复    2024-01-12 16:19:25 +08:00
    Kobayashi
        1
    Kobayashi  
       2024-01-11 10:33:47 +08:00
    原理上还是不一样的。asdf, rbenv, pyenv 等的 shim 机制本身就是为了避免反复修改 PATH 。direnv 走的是老方案,不过是自动化 PATH 的修改、恢复。
    hankli
        2
    hankli  
    OP
       2024-01-11 10:39:06 +08:00
    @Kobayashi 是的, 但是 shim 也有缺点,就是太慢了. 其实这些工具无非就是软链接、操作 PATH 和 shim..... 各有优缺点, 因为要实现 shell 会话内有效, 这个软链接和 shim 方案解决不了的
    hipkomh
        3
    hipkomh  
       2024-01-11 11:07:56 +08:00
    https://news.ycombinator.com/item?id=34583080
    https://github.com/jdx/mise

    前些天刚试过 rtx ( mise 改名之前叫这个),发现配合 vscode 用还是不如 asdf-vm + direnv
    hankli
        4
    hankli  
    OP
       2024-01-11 11:23:59 +08:00
    @hipkomh 具体点, “不如” 是有什么问题吗, 我看看我这个有没有
    hipkomh
        5
    hipkomh  
       2024-01-11 17:36:50 +08:00   1
    @hankli 有空了我试试你这个和上面的新版,如果有问题开个 issue 给你描述下~
    kuanat
        6
    kuanat  
       2024-01-11 23:52:08 +08:00   1
    支持一下~

    asdf shell 一直都有,global/local/shell 都支持。我记得 shell 的实现比较粗暴,就是类似 ENV=xxx cmd 的方式。

    shim 机制的问题在于需要 reshim ,比如 python pip 安装了某个可执行文件,需要 reshim 才能在当前 shell $PATH 索引到。极小概率的情况,比如某些程序运行后释放执行脚本,又硬编码 #!env python 这样会导致出错。

    asdf 有个 direnv 插件,可以管理环境变量,解决每次执行都要 shim 查找的问题。(话说慢真是个问题吗?)

    asdf 的优点是插件可以比较方便复用已有的构建脚本,本地构建安装而不是下载二进制文件。

    另外我个人比较喜欢这种脚本都用 git 做管理的模式。
    hankli
        7
    hankli  
    OP
       2024-01-12 09:35:58 +08:00
    @kuanat 感谢,
    >(话说慢真是个问题吗?)
    实话实说,其实 100ms 和 10ms,本地开发而言, 没啥差别.... 但是对推广而言, 这确实是卖点哈哈哈哈.

    > asdf 的优点是插件可以比较方便复用已有的构建脚本,本地构建安装而不是下载二进制文件。
    这个确实是, 比如 python 和 ruby, 目前 VersionFox 不打算这么做, 因为对于 unix-like 环境, 安装依赖啊什么的都很方便,但是对于 windows 环境, 在 windows 上进行本地构建, 有点麻烦..使用提前构建好的二进制文件,进行分发是目前看来比较好的方式..

    > 另外我个人比较喜欢这种脚本都用 git 做管理的模式。
    一开始考虑过, 但是为了快速上线吧(因为不能保证 windows 环境下一定有 git, 所以使用用 git, 就必须使用 golang 实现的 git, 比如 go-git),目前先采用 http,后面看情况而定...哈哈哈
    kuanat
        8
    kuanat  
       2024-01-12 16:19:25 +08:00
    @hankli #7

    我一开始没注意到 VersionFox 是跨全平台的。为了兼容 Windows/PS 的话,确实单可执行文件比脚本靠谱。(我觉得理智一点的开发者,在 Windows 环境不用 WSL ,也应该用 MSYS2 吧哈哈)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1049 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:30 PVG 02:30 LAX 11:30 JFK 14:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86