8 个稳定版本
1.1.8 | 2022年7月30日 |
---|---|
1.1.7 | 2022年7月25日 |
#887 在 开发工具
25 每月下载量
62KB
1.5K SLoC
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 通过项目作用域(project
或 workspace
)和需求作用域(required
或 development
)来分离依赖项。
项目作用域
要安装依赖项的项目。如果是项目依赖项,那么它就是:项目依赖项。项目依赖项将被写入对应的 project.json
。
工作空间依赖项可以被视为全局依赖项。它们将被写入根目录下的 workspace.json
。这些依赖项将始终是最终 package.json
的一部分。
需求作用域
将 required
和 development
范围视为类似于 npm 项目中的 dependencies
和 devDependencies
。
使用方法
esteem
自身命令非常少;大部分重活都是由您的包管理器(如 npm
、yarn
、pnpm
等)完成的。
目前,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
依赖于 nestjs
和 prettier
,您将必须进行以下更改。
例如:apps/server/project.json
{
"dependencies": {
"development": ["prettier"],
"required": ["nestjs"]
}
}
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
)
示例
Bookius是一个项目,其中esteem
与Dokku、Github Actions和Docker结合使用以进行部署。所有项目都是从单个Digital Ocean droplet中部署的。
您可以通过查看Dockerfile
来了解其在docker环境中的使用。
贡献
您的PRs和stars总是受欢迎的。
依赖项
~7–18MB
~240K SLoC