#bolt #command #monorepo #command-line #projects #command-line-tool #run-command

bin+lib bolt-cli

Bolt 的 CLI 工具,用于管理多语言项目

1 个不稳定版本

0.1.0 2022 年 2 月 24 日

#8#bolt

MIT 许可证

38KB
794

Bolt

Bolt 是一个用于管理多语言项目的命令行工具。它是由于需求而开发的。我管理着一个组织在 monorepo 中的项目,每个项目使用不同的语言:即 JavaScript、Dart、Elixir、Python 以及更多。由于需要首先 cd 进入相应的项目目录,然后从那里运行命令,因此管理所有这些单独的项目变得越来越困难。

Bolt 通过充当所有命令的“代理”来简化所有这些操作。您使用 bolt 在工作区的根目录处执行所有操作,并指定操作针对哪个应用程序,bolt 解析操作并创建一个子进程以执行该命令。以下是对 bolt 及其使用方法的简要介绍

    bolt up <app-name>?
    #the app-name is optional, if you dont provide it, you will be prompted for which app to start
    #the app command simply starts-up the specified application
    #each project contains a boltconfig.json file which has a priority field, it can be used as shown below:

    bolt up -p 1
    #if you specifiy the -p(priority) flag, bolt starts all apps with a priority that is equal to the provided value
    #Other commands utilized in the workspace include:

    bolt test <app-name>? (-p ?)
    #same rules for priority apply, runs all configured tests
 

Bolt 用 Rust 编写,如您所见,它更像是任务运行器而不是构建工具。它尚未覆盖本地构建工具,而是围绕它们提供统一的命令运行接口,从而在 monorepo 中管理多语言项目。

开始使用 bolt

在您的机器上设置 bolt 实际上非常简单。您只需下载并将其保存到磁盘中的任何位置(最好是在不需要提升权限的位置)然后将其位置添加到您的路径中。

  • 对于 Windows,您可以从这里获取可执行文件
  • 对于 MacOS,您可以通过运行以下命令安装 bolt
    brew update
    
    brew install bolt
    
  • 对于 Linux 系统,您可以使用您特定的包管理器安装 bolt

Bolt 内部结构

Bolt 需要两个关键文件才能正确运行

  • 工作区根目录中的 bolt.json 文件。此文件包含关于工作区的一般信息。例如,工作区名称和查找项目的地方。它可能还包含一个 registered 字段,在这种情况下,如果您想使用 bolt 来管理给定工作区中的某些项目而不是所有项目,则该字段是必需的。如果没有传递 registered 字段,bolt 将扫描工作区中的所有项目,检查它们的配置文件。
  • 每个项目单独目录中的 boltconfig.json 文件。以下是在一个 Angular 应用程序中找到的 boltconfig.json 的示例
    {
    "info": {
      "name": "angular-app",
      "alias": "app",
      "priority": 0,
      "env": {
        "from": "angular",
        "cli": "ng",
        "pkg_mgr": {
          "value": "npm",
          "cmds": {
            "add": "install",
          }
        }
      }
    },
    "policies": [{
        "name": "up",
        "depends_on": "^",
        "map_to": {
          "value": "cli",
          "cmd": "serve"
        }
      },
      {
        "name": "install",
        "depends_on": "",
        "map_to": {
          "value": "pkg_mgr"
        }
      },
     ]
    }
    
    • 信息>
      • name:这对应于项目所在的目录名称。
      • alias:别名可用于在无需输入实际目录名称的情况下引用项目。
      • priority:该字段告诉bolt如何处理指定项目。例如,如果您运行bolt up -p 1,bolt将以1的优先级运行所有应用。您还可以运行bolt up -p <1,这将启动所有优先级低于或等于1的应用。
      • env > from:指的是项目的最高级别环境,即在本例中,from设置为angular,它本身依赖于js环境,这需要node等。
      • env > cli:某些应用有用于其使用和管理的cli,例如@ng/cli或@vue/cli。您可以在此处指定值,或者它可以是空的。
      • env > pkg_mgr > value:应用包管理器,例如npm、yarn、cargo、flutter pub、mix等。
      • env > pkg_mgr > cmds:这有助于bolt了解包管理器的可用命令。
    • policies:策略是bolt的核心,告诉bolt如何映射各种命令,例如,在上面的例子中,运行bolt up app将被映射到ng serve
      • name:策略名称对应于bolt命令,即bolt up。
      • depends_on:此值告诉bolt是否需要在当前命令之前运行任何命令。如果值为^install,bolt将在运行命令之前检查依赖项。
      • map_to:这是命令的路由位置,可以是cli或pkg_mgr。

从头开始构建bolt

要从头开始构建bolt,首先将此仓库克隆到您的本地环境。请注意,您必须有一个现有的开发环境来运行rust代码。官方指南可以在这里找到。

假设您已经有了必要的环境,现在您只需运行

cargo build

Bolt功能实现

完成

  • 运行bolt up app-name将启动指定应用
  • Bolt可以成功地将您的命令从根目录重定向。例如,运行bolt angular-app ng g c navbar将在名为angular-app的项目中运行命令。
  • Bolt可以解析项目别名,例如,如果您的项目名称很长,如my_super_awesome_python_app,您可以在boltconfig.json中添加别名供bolt使用。

待实现

  • 通过运行bolt init启用创建新工作区
  • 通过运行bolt bootstrap将bolt添加到现有monorepo中
  • 通过运行bolt test运行配置的测试
  • 通过运行bolt update检查并应用bolt更新

依赖项

~3–11MB
~114K SLoC