V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yuhangch
V2EX  ›  程序员

2022 用 node 写个命令行工具的最佳实践?

  •  
  •   yuhangch ·
    yuhangch · 2022-01-07 11:39:49 +08:00 · 3018 次点击
    这是一个创建于 1086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很简单的功能,之前可能会用 go 写。。现在完全不想碰了🐶

    1 . 打包后体积尽量小点,最好能是个单个可执行文件,外挂个配置文件

    2 . 跨平台简单点( win / mac )

    第 1 条附言  ·  2022-01-08 14:59:18 +08:00
    感谢各位🙏的建议,最后是用 deno 做的,再次感谢一楼

    暂时完工,是个从 notion 导出 markdown ,再转成 hugo post 格式的小工具
    估计很少有人有这个需求🙃️ ,👉 https://github.com/yuhangch/hution
    18 条回复    2022-01-08 16:07:03 +08:00
    lisongeee
        1
    lisongeee  
       2022-01-07 11:45:20 +08:00   ❤️ 1
    你可以用 deno ,不用打包,不用手动下载
    使用的时候直接 deno https://cli.url -a -c -c
    shuimugan
        2
    shuimugan  
       2022-01-07 11:48:39 +08:00   ❤️ 1
    lscho
        3
    lscho  
       2022-01-07 12:17:05 +08:00
    你这需求不用 go 那不是找麻烦。。。node 想打包的话,体积不会小
    SorcererXW
        4
    SorcererXW  
       2022-01-07 12:46:15 +08:00
    可以用 esbuild 编译成单 js 文件
    wsseo
        5
    wsseo  
       2022-01-07 12:57:08 +08:00
    用 rust 更合适
    timpaik
        6
    timpaik  
       2022-01-07 13:01:59 +08:00 via Android
    node 单文件体积可能还不如 go 写,你这种需求还是看看 rust 吧
    lululau
        7
    lululau  
       2022-01-07 13:27:08 +08:00
    CokeMine
        8
    CokeMine  
       2022-01-07 14:42:21 +08:00 via iPad
    要可执行文件应该是要把运行时也打进去了,见 2 楼。这体积肯定不会小的…
    weixiangzhe
        9
    weixiangzhe  
       2022-01-07 17:30:38 +08:00
    带 node_module 就小不了
    hutoer
        10
    hutoer  
       2022-01-07 17:37:03 +08:00
    一定要 js ?可以试试.net core
    star7th
        11
    star7th  
       2022-01-07 17:55:18 +08:00
    这个事情我也探索过。暂时还是觉得 go 是最好的选择。用 node 的话,体积小不了。我也不知道其他人有没有更好的方案
    shuimugan
        12
    shuimugan  
       2022-01-07 18:20:47 +08:00
    这种东西要自己动手测试过,有数据对比才知道取舍。

    nest.js 示例项目打包后 18MB ,gin 实例代码打包后 4.6MB ,测试结果如下:

    用 nest new project-name 创建一个模板应用并安装依赖,再使用 pgk 打包成单文件
    pkg --compress Brotli -o test-bin dist/main.js

    41MB ,tar -czvf 后 18MB

    用 gin 的示例代码编译后 8.7MB ,tar -czvf 后 4.6MB

    node 和 go 的差距就在这里了,18MB VS 4.6MB ,看你能不能接受


    本来写了一大段包括命令的,结果 v 站的 cf 防护开了,当成有恶意代码被阻拦了……
    mritd
        13
    mritd  
       2022-01-07 18:26:45 +08:00 via iPhone
    我觉得你在嘲讽 nodejs 🤣 你说的这个需求 go 完全压制 node
    xiaojun1994
        14
    xiaojun1994  
       2022-01-07 18:35:27 +08:00
    是我理解错了吗,我理解的是你想用写一个命令?比如:cp 、ls 这种可以
    xiaojun1994
        15
    xiaojun1994  
       2022-01-07 18:35:58 +08:00
    @xiaojun1994 是我理解错了
    shangyes
        16
    shangyes  
       2022-01-08 03:40:47 +08:00
    deno compile

    https://deno.land/manual/tools/compiler#compiling-executables
    li02
        17
    li02  
       2022-01-08 15:41:48 +08:00 via Android
    就你这需求,写 js 在控制台运营就可以了啊,哪用这么复杂
    yuhangch
        18
    yuhangch  
    OP
       2022-01-08 16:07:03 +08:00
    @li02 现在想想是搞复杂了,本来以为自己要处理文本,后来发现有接口能用🙃️,想在终端用,后续发布也方便些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 04:33 · PVG 12:33 · LAX 20:33 · JFK 23:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.