1 个不稳定版本
0.1.0 | 2022 年 2 月 24 日 |
---|
#8 在 #bolt
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