【问题标题】:Is there a way to build CLI with no dependencies required?有没有一种方法可以构建不需要依赖项的 CLI?
【发布时间】:2020-05-31 19:21:25
【问题描述】:

最近我想用 Ruby 搭建一个小 CLI,但担心在没有安装 Ruby 的机器上使用它。我搜索了流行 CLI 的示例,发现 Docker CLI 是用 Go language 构建的。我可以在未安装 Go 的计算机上使用此 CLI。如何构建一个不需要您安装 Ruby 的工具?

我的猜测是涉及到一个构建过程,它可能被编译成大多数系统上存在的东西,比如 shell 或 smth。对不起,如果这是一个蹩脚的猜测/问题!

【问题讨论】:

  • 看看这个项目github.com/pmq20/ruby-packer
  • 嘿@Yakov,谢谢你的链接!这正是我所需要的。这解决了这个问题,但我仍然很好奇它是如何在引擎盖下工作的。希望我能够从现在开始自己探索它,或者也许有人会在这个问题下解释包装背后的内部运作:)
  • 它只是创建了一个文件,将你的代码和一个 ruby​​ 解释器的副本放在一起,所以你在你的项目中发送了一个 ruby​​ 的副本 :)
  • 您必须安装 Ruby 才能运行 Ruby 脚本。 Ruby 是一种解释型语言,不是编译型的。机器上的某个地方你必须有一个 Ruby。

标签: ruby command-line-interface


【解决方案1】:

(注意:这不是一个详细的答案,只是对其工作原理的总结) Cli 程序和其他程序一样,没有什么特别之处。

Go 是一种编译语言 - 一个名为“编译器”的程序获取 Go 代码并将其直接翻译成机器语言,遵循操作系统强加的约定。它变成了纯粹的 0 和 1,没有引用其他任何东西。主要优点是它是独立的,但是您必须在每个不同的架构(32 位、arm 处理器……)和操作系统(windows、linux、macos)上重新编译它——它是负责重定向的操作系统在 cli 上输入和输出。

Ruby 是被解释的。有一个名为“Ruby 解释器”的程序可以即时将您的代码翻译成适当的机器代码。这是一种不同的方法,它更“高级”。 优点是您不需要重新编译代码。但是,“Ruby 解释器”本身必须用某种编译语言编写。

【讨论】:

  • 翻译到解释器这个词是正确的,但更准确地说,它不翻译,它有解释器中的每个程序,解释器是实际在机器上运行的程序和我们的程序将成为解释程序的输入。
猜你喜欢
  • 2015-01-03
  • 2018-08-22
  • 1970-01-01
  • 2013-12-07
  • 2020-06-05
  • 2021-06-19
  • 1970-01-01
  • 2010-12-03
相关资源
最近更新 更多