2 个版本
使用旧的 Rust 2015
0.1.1 | 2018年9月25日 |
---|---|
0.1.0 | 2018年9月25日 |
#25 in #yarn
2KB
这是什么?
例如,假设你有一个 express 项目,其中有一个 server.js
脚本。你不必运行 node ./server.js
,只需运行 nd ./server.js
。 nd
将仅代理命令到 node
。然而,如果 package.json
中指定的任何依赖项未安装或不在正确的版本(或 package-lock.json
或 yarn.lock
)中,nd
将首先获取它们并更新锁定文件,然后再运行。
为什么它这么快?
nd
很可能是 Node.js 项目的最快包管理器。在支持的文件系统(包括 MacOS 上的 APFS 或 Linux 上的 btfs)上,我们利用写时复制行为来创建 node_modules
目录。所有文件都从全局缓存目录重新链接,因此您的机器上的任何其他项目都将重用相同的文件,节省磁盘空间,大大提高安装时间并显著减少磁盘使用。
如果您删除了您的 node_modules
目录或已从另一个项目缓存了特定依赖项版本,nd 能够在不到一秒内构建具有许多依赖项的项目。
您不再需要为每个 react 项目创建庞大的 node_modules
目录。
这根本不同于硬链接或符号链接(这些通常会导致 node 项目出现奇怪的问题)。这些文件是普通文件,您可以编辑它们而不会影响其他项目。如果您手动修改了 node_modules
目录中的文件(例如,通过添加一个 console.log()
语句进行调试),当它被修改时,它将在磁盘上创建一个文件的副本。这意味着您可以在一个项目中进行修改,而不会影响其他项目。
对于 nd
的用户来说,这种方法将非常透明。它的行为与 npm 或 yarn 完全相同。在不支持此功能的文件系统上,我们简单地回退到类似于 npm 和 yarn 的传统缓存。即使没有写时复制,nd 的性能也优于 yarn 和 npm。
与其他工具兼容性好
兼容 yarn 和 npm 锁文件。无需任何自定义配置。您可以在团队项目中使用 nd,而不需要整个团队都接受它。
刷新流程
当您运行 nd 时,它首先执行的是“刷新”项目。这类似于 npm install
,但速度要快得多,所以我们会在运行任何脚本之前执行它。
流程遵循以下步骤
initialize
- 读取本地node_modules
树,package.json
,锁文件(yarn.lock
或package-lock.json
)以检查是否存在任何缺少的依赖项或版本错误。resolve
- 获取包元数据以找到适当的 semver 版本和 tarball URLcache
- 将包 tarball 下载到全局缓存目录以供任何项目使用reflink
- 一旦从步骤 #2 解析了所有内容,现在我们可以构建理想的node_modules
树
步骤 1-3 一旦执行 nd
就会并行发生。这意味着一旦它发现了一个缺少的依赖项,它就会立即开始解析和缓存它,同时继续搜索更多包。
兼容性
兼容性是 nd
的一个主要设计目标。尽管存在写时复制行为。
- Windows - 除非 ReFS 变得更加流行,否则写时复制行为目前尚不可行。
依赖项
~3–12MB
~131K SLoC