#包管理器 #单体仓库 #项目 #工作区 #磁盘 #单个 #nx

bin+lib esteem

为 NX 工作区提供的轻量级且快速的单体仓库管理器

8 个稳定版本

1.1.8 2022年7月30日
1.1.7 2022年7月25日

#887开发工具

25 每月下载量

MIT 许可证

62KB
1.5K SLoC

Rust 1K SLoC Shell 365 SLoC // 0.1% comments

esteem

让您的 NX 工作区在磁盘上的占用更小。

为什么?

这个工具的存在有一个非常简单的理由 - 我是一个 ✨ 贪小便宜的 ✨。我宁愿花一个周末开发一个工具,也不愿额外支付 5 美元在 Digital Ocean 上购买额外的存储,然后就此结束。

我向您介绍 esteem

NX 单体仓库非常棒,但它们不适用的情况是在您需要部署项目时。现在一个简单的 Next 应用程序就需要 2GB 的存储空间,因为您还必须安装单体仓库中所有其他项目的依赖项。 esteem 通过跟踪每个项目的依赖项并遵循 NX 的单版本策略来解决此问题。

它是如何工作的?

它只跟踪每个项目的依赖项。对于现有项目,这意味着您需要进行一些手动工作,将项目的依赖项从 package.json 复制到其 project.json

当为项目调用 install-isolated 时,它会简单地收集该包的依赖项并将其写入根目录的 package.json。然后,您可以使用包管理器的安装命令,然后 voilà!您就有了更小的 node_modules

安装

  • 引导式安装

    curl https://raw.githubusercontent.com/IgnisDa/developrs/main/apps/esteem/install.sh -o install.sh
    # Warning: always examine scripts downloaded from the internet before running them locally.
    bash install.sh
    
  • 手动安装

    您还可以从 发布页面 下载适当的可执行文件。

  • CI 环境:例如在 Dockerfile

    # This script writes to /usr/local/bin/, you can change this via the `--bin-dir` flag
    RUN curl https://raw.githubusercontent.com/IgnisDa/developrs/main/apps/esteem/install.sh | sudo sh -s -- --yes
    

其他

Esteem 通过项目作用域(projectworkspace)和需求作用域(requireddevelopment)来分离依赖项。

项目作用域

要安装依赖项的项目。如果是项目依赖项,那么它就是:项目依赖项。项目依赖项将被写入对应的 project.json

工作空间依赖项可以被视为全局依赖项。它们将被写入根目录下的 workspace.json。这些依赖项将始终是最终 package.json 的一部分。

需求作用域

requireddevelopment 范围视为类似于 npm 项目中的 dependenciesdevDependencies

使用方法

esteem 自身命令非常少;大部分重活都是由您的包管理器(如 npmyarnpnpm 等)完成的。

目前,esteem 只与 NX 单一代码仓库兼容(或所有存在根级别 workspace.json 和项目级别配置的 <project_type>/<project_name>/project.json)的项目)。

注意: 您可以始终运行 esteem <子命令> --help 获取更多信息。

init

为与 esteem 一起使用而准备新仓库。这将向所有 project.json 文件和 workspace.json 添加一个此结构的对象。

注意: 如果您不想运行此命令,则不需要运行,esteem 可以处理没有 dependencies 键的项目。

{
  "dependencies": {
    "development": [],
    "required": []
  }
}

现在对于每个 project.json,您必须手动添加该项目的依赖包。所以如果项目 server 依赖于 nestjsprettier,您将必须进行以下更改。

例如:apps/server/project.json

{
  "dependencies": {
    "development": ["prettier"],
    "required": ["nestjs"]
  }
}

这里 是来自 示例 仓库的 project.json

add

它为项目添加依赖项。例如

$ esteem add server redis luxon
# your package manager called automatically after making changes to `projects/server/project.json`

传递 -D 标志以添加开发依赖项。

workspace add

与上述功能相同,但用于工作空间范围内的依赖项。

remove

根据其他项目是否依赖于该依赖项从项目中删除依赖项。

$ esteem remove server luxon typescript bull
# your package manager called automatically after making changes to `projects/server/project.json`

workspace remove

与上述功能相同,但用于工作空间范围内的依赖项。

install-isolated

此命令收集项目(及其依赖项目)的所有依赖项并将其写入 package.json。此命令仅在 CI 环境中运行,因为它会更改您的 package.json 文件。它将创建 package.json 文件的备份。调用您的包管理器以安装依赖项是您的责任。

esteem install-isolated server

它还接受多个参数并解决所有依赖项。它使用底层的 NX 图 解决依赖树。

一些注意事项

  • 锁文件将不会package.json同步,因为esteem不会解析依赖。然而,这不应该成为问题,因为依赖项只是被移除而没有被添加(并且它们已在锁文件中解析)。但是,这意味着pnpm install --frozen-lockfile和类似命令将会失败。只需移除该标志,它应该按预期工作。

  • 如果您运行esteem install-isolated server命令,以下文件应该存在(路径保持不变)

    • package.json
    • pnpm-lock.yaml(或您的包管理器的锁文件)
    • workspace.json
    • apps/server/project.json
    • libs/config/project.json(假设server依赖于config

    您可以通过查看这些行来了解示例存储库中的实现,这些行在一个Dockerfile中。

示例

Bookius是一个项目,其中esteem与Dokku、Github Actions和Docker结合使用以进行部署。所有项目都是从单个Digital Ocean droplet中部署的。

您可以通过查看Dockerfile来了解其在docker环境中的使用。

贡献

您的PRs和stars总是受欢迎的。

依赖项

~7–18MB
~240K SLoC