• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hankli
V2EX  ›  程序员

试一下用 VersionFox 替代 asdf-vm?

  •  1
     
  •   hankli ·
    aooohan · Jan 11, 2024 · 2785 views
    This topic created in 895 days ago, the information mentioned may be changed or developed.

    先上演示

    asciicast

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

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

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

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

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

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

    喜欢就给个 star🌟吧, 🙏🙏

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

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

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

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

    我一开始没注意到 VersionFox 是跨全平台的。为了兼容 Windows/PS 的话,确实单可执行文件比脚本靠谱。(我觉得理智一点的开发者,在 Windows 环境不用 WSL ,也应该用 MSYS2 吧哈哈)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3069 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 12:58 · PVG 20:58 · LAX 05:58 · JFK 08:58
    ♥ Do have faith in what you're doing.