跳转到主要内容

npm包管理器加速器,用于Node.js

项目描述

https://travis-ci.org/xolox/python-npm-accel.svg?branch=master https://coveralls.io/repos/xolox/python-npm-accel/badge.svg?branch=master

npm-accel程序是npm(Node.js包管理器)的包装器,旨在优化一个特定的用例:尽可能快地从package.json文件中创建node_modules目录。

它基于这样一个假设,即您构建node_modules目录的频率高于您更改package.json文件内容的频率,因为它计算依赖项的指纹,并使用该指纹作为缓存键,将完整的node_modules目录缓存到tar存档中。

本程序旨在用于始终或经常从空白的node_modules目录开始的环境,需要从头开始填充完整的目录(例如,持续集成构建和部署)。我特别不声称如果您正在更新现有的node_modules目录,您将看到任何速度提升。

npm-accel程序目前已在Python 2.7、3.5、3.6、3.7、3.8和PyPy上进行了测试(是的,它是用Python编写的,请见谅😉)。它旨在在UNIX系统(如Linux和Mac OS X)上工作,并且特别不适用于Windows(有关详细信息,请参阅支持的操作系统)。

安装

npm-accel软件包可在PyPI上找到,这意味着安装应该非常简单

$ pip install npm-accel

实际上有无数种安装Python软件包的方法(例如,每个用户site-packages目录虚拟环境或仅安装到系统范围),我没有打算在这里进行讨论,所以如果您感到害怕,请在返回这些说明之前了解您的选项😉。

或者,如果您正在运行Arch Linux,npm-accel在AUR上有提供。

用法

使用npm-accel软件包有两种方式:作为命令行程序npm-accel和作为Python API。有关Python API的详细信息,请参阅Read the Docs上的API文档。以下是命令行界面的描述。

用法: npm-accel [OPTIONS] [DIRECTORY]

npm-accel程序是npm(Node.js包管理器)的包装器,它优化了一个特定的用例:尽可能快地从“package.json”文件构建“node_modules”目录。

它基于这样的假设,即您构建“node_modules”目录的频率高于您更改“package.json”文件内容的频率,因为它计算依赖项的指纹,并使用该指纹作为缓存键,以将完整的“node_modules”目录缓存到tar存档中。

支持选项

选项

描述

-p--production

不安装“devDependencies”中列出的模块。

-i--installer=NAME

设置要使用的安装程序。对于NAME的支持值是“npm”、“yarn”、“pnpm”和“npm-cache”。当yarn可用时,它将被选为默认安装程序,否则默认为npm。

-u--update

不读取缓存但写入缓存。如果您怀疑缓存条目已损坏,可以使用--update来“刷新”缓存条目。

-n--no-cache

不允许写入npm-accel管理的缓存(读取仍然允许)。此选项不会禁用npm、yarn、pnpm和npm-cache执行的内部缓存。

-c--cache-directory=DIR

设置npm-accel缓存存储的目录路径名。

-l--cache-limit=COUNT

设置要保留的最大tar存档数量。当缓存目录包含超过COUNT个存档时,最近最少使用的存档将被删除。默认为20。

环境变量$NPM_ACCEL_CACHE_LIMIT提供了一种方便的方法来在CI和构建环境中自定义此选项。

-b, --benchmark

基准测试并比较以下安装方法

  1. npm install

  2. yarn

  3. pnpm

  4. npm-accel

  5. npm-cache

第一种方法不进行任何缓存(除了npm本身自带的HTTP缓存),而其他四种方法各自管理自己的缓存(也就是说,npm-accel的缓存逻辑仅在步骤4中使用)。

注意:基准测试会清除npm、yarn、pnpm、npm-accel和npm-cache管理的缓存,以便提供公平的比较(您可以在Python API中覆盖此操作,但不能在命令行中)。

-r, --remote-host=SSH_ALIAS

在远程系统上操作而不是本地系统。参数SSH_ALIAS给出了远程主机的SSH别名。

-v, --verbose

增加日志详细程度(可重复)。

-q, --quiet

减少日志详细程度(可重复)。

--version

报告npm-accel的版本。

-h, --help

显示此信息并退出。

状态

npm-accel项目于2016年9月开发并发布,因为我厌倦了等待npm install完成,特别是在持续集成构建和部署的背景下(你经常从一个空的node_modules目录开始)。它在不到一周的时间内完成,几乎没有关于Node.jsnpm的知识,这也是为什么它用Python编写的原因 😛。

该项目最初以95%的测试覆盖率发布,我在评估这些工具时非常小心,没有重复我在npm-cachenpm-fast-install中遇到的错误 🙂。

撰写本文时(2020年初),npm-accel在我的雇主处已经活跃使用超过三年,并且它极大地加快了我们的持续集成构建和部署。但不要只听我的话,试一试,看看它是否有助于您的用例!

性能

以下表格列出了对包含在package.json文件中列出的128个依赖项的私有代码库运行npm-accel --benchmark的输出(结果是一个895 MiB的node_modules目录)

方法

迭代

经过时间

百分比

npm install

1 of 2

1分钟和16.56秒

100%

npm install

2 of 2

1分钟和4.99秒

85%

yarn

1 of 2

1分钟和6.33秒

87%

yarn

2 of 2

41.7秒

54%

pnpm

1 of 2

55.24秒

72%

pnpm

2 of 2

41.28秒

54%

npm-accel

1 of 2

1分钟和12.1秒

94%

npm-accel

2 of 2

3.25秒

4%

npm-cache

1 of 2

2分钟和14.41秒

176%

npm-cache

2 of 2

22.51秒

29%

有关此基准测试的一些说明

  • 每种安装方法都会运行两次。第一次运行从空的缓存目录开始,目的是“预热缓存”。第二次运行旨在使用缓存,并且应该能够非常有效地使用它,前提是两次运行之间package.json文件没有发生变化。

  • 在基准测试过程中,npm-accel执行的缓存仅在上述表格的第八行中使用。这是因为基准测试的初衷(对我来说)是找出开发和发布npm-accel是否值得。也就是说,如果没有提供速度提升,那我就不值得花费你的时间,更不用说我的时间了 😛。

支持的操作系统

npm-accel程序是为像Linux和Mac OS X这样的UNIX系统开发的。它需要安装几个外部命令(例如mkdir、mv、rm、tar和which)。

我已经尽量使所有外部命令调用与Linux和BSD变体的命令(如tar)兼容,也就是说,npm-accel只使用简短选项,并且即使它们可能很有用,也会跳过更多奇特的特性。如果你发现我在这方面失败了,请随时将其报告为错误。

为了记录在案:出于几个原因,有意识地决定使用tar程序而不是通过Python的tarfile模块操作tar存档。

未来改进

处理可选依赖项

我在野外从未见过optionalDependencies,但在浏览package.json文档时遇到了它们。也许这些也应该是计算缓存键的一部分?

联系

最新版本的npm-accel可在PyPI(https://pypi.python.org/pypi/npm-accel)和GitHub(https://github.com/xolox/python-npm-accel)上找到。文档托管在Read the Docs(https://npm-accel.readthedocs.io/en/latest/)。有关错误报告,请在GitHub(https://github.com/xolox/python-npm-accel)上创建一个问题。如果您有任何问题,建议等,请随时通过电子邮件(peter@peterodding.com)发送给我。

许可证

本软件根据MIT许可证授权。

© 2020 Peter Odding。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

npm-accel-2.0.1.tar.gz (26.2 KB 查看散列

上传时间

构建分布

npm_accel-2.0.1-py2.py3-none-any.whl (20.2 KB 查看散列

上传时间 Python 2 Python 3