V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hankli
V2EX  ›  程序员

试一下用 VersionFox 替代 asdf-vm?

  •  1
     
  •   hankli ·
    aooohan · 302 天前 · 1529 次点击
    这是一个创建于 302 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先上演示

    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  
       302 天前
    原理上还是不一样的。asdf, rbenv, pyenv 等的 shim 机制本身就是为了避免反复修改 PATH 。direnv 走的是老方案,不过是自动化 PATH 的修改、恢复。
    hankli
        2
    hankli  
    OP
       302 天前
    @Kobayashi 是的, 但是 shim 也有缺点,就是太慢了. 其实这些工具无非就是软链接、操作 PATH 和 shim..... 各有优缺点, 因为要实现 shell 会话内有效, 这个软链接和 shim 方案解决不了的
    hipkomh
        3
    hipkomh  
       302 天前
    https://news.ycombinator.com/item?id=34583080
    https://github.com/jdx/mise

    前些天刚试过 rtx ( mise 改名之前叫这个),发现配合 vscode 用还是不如 asdf-vm + direnv
    hankli
        4
    hankli  
    OP
       302 天前
    @hipkomh 具体点, “不如” 是有什么问题吗, 我看看我这个有没有
    hipkomh
        5
    hipkomh  
       302 天前   ❤️ 1
    @hankli 有空了我试试你这个和上面的新版,如果有问题开个 issue 给你描述下~
    kuanat
        6
    kuanat  
       302 天前   ❤️ 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
       301 天前
    @kuanat 感谢🙏,
    >(话说慢真是个问题吗?)
    实话实说,其实 100ms 和 10ms,本地开发而言, 没啥差别.... 但是对推广而言, 这确实是卖点哈哈哈哈.

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

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

    我一开始没注意到 VersionFox 是跨全平台的。为了兼容 Windows/PS 的话,确实单可执行文件比脚本靠谱。(我觉得理智一点的开发者,在 Windows 环境不用 WSL ,也应该用 MSYS2 吧哈哈)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   941 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:56 · PVG 05:56 · LAX 13:56 · JFK 16:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.