0

在这一点上,我对 Python 生态系统更加熟悉,并且对如何使用npm我习惯使用的pip.

假设我有一个特定 Python 包的轮子,以及每个 Python 包的依赖项的轮子文件。假设我将所有这些车轮文件放在一个名为/path/to/wheel/files. 要安装这个包及其所有依赖项,我可以运行类似的东西pip install /path/to/wheel/files/*.whl --no-deps,这样--no-deps我就不必以正确的顺序安装各种依赖项。

npm有与此等价的吗?我正在使用npm-offline-packager创建一个 tarball,其中包含一个 Node 包(作为它自己的 tarball)及其所有依赖项(作为它们自己的 tarball)。我知道我可以告诉npm install安装一个特定的 tarball。但是,当我这样做时,它会尝试从在线 NPM 注册表中提取所需的依赖项,而不是从我已经拥有的 tarball 中提取依赖项。

理想情况下,我想npm install使用 tarball 将主包添加到我的项目中package.json,同时将包的依赖项添加到我的项目的package-lock.json. 当然,我还希望将主包及其所有依赖项也安装到我的项目node_modules目录中。

TL;DR是否npm有相当于 的东西pip install /path/to/wheel/files/*.whl --no-deps

4

1 回答 1

0

我在这里回答我自己的问题,但请注意,我的回答仅适用于我的特定用例,可能不适用于一般情况。

对于我的用例,我可以访问两台计算机:一台可以访问互联网,另一台不能。对于无法访问 Internet 的机器,我尝试使用Verdaccio作为创建自托管 NPM 注册表的一种方式。但是,将包发布到 Verdaccio 并不起作用,因为它一直试图从公共 NPM 存储库中提取包的依赖项。解决方案是删除 Verdaccio 的配置文件中对“npmjs”的所有引用(对我来说,这是 Verdaccio 在 中创建的~/.config/verdaccio/config.yaml)。

因此,如果有人需要在无法访问 Internet 的机器上进行开发,则设置 Verdaccio 的过程如下所示:

  1. 在可以访问互联网的机器上,使用npm init(我将我的项目称为“verdaccio_runner”)创建一个 NPM 项目。我这样做的原因是,在无法访问 Internet 的机器上没有 NPM 注册表,很难进行 Verdaccio 的全局安装。
  2. 将此项目转移到无法访问 Internet 的机器上。
  3. 一旦转移过来,从项目中运行 Verdaccio,如下所示npx verdaccio
  4. 退出 Verdaccio。
  5. 从 Verdaccio 创建的配置文件中删除对“npmjs”的所有引用(同样,我的位置是~/.config/verdaccio/config.yaml)。
  6. 再次运行 Verdaccio 以引入这些更改。
  7. 告诉 NPM 你的私有注册表在哪里:npm config set registry http://localhost:4873/.
  8. npm adduser通过运行然后填写提示您输入的信息,将您自己添加为用户。

在无法访问 Internet 的机器上将包发布到 Verdaccio 的过程如下所示:

  1. 对于您要安装的软件包,在可以访问 Internet 的机器上运行npo fetch <package name> --no-cache(假设您已经在可以访问 Internet 的机器上完成了npm-offline-packager的全局安装)。
  2. 将为您创建的 tarballnpo带到无法访问 Internet 的机器上。
  3. 解压压缩包。
  4. 从创建的目录中,运行for file in ./*.tgz; do npm publish $file; done.
  5. 现在可以将已发布的包npm install编辑到无法访问 Internet 的计算机上的项目中。

注意:为了使私有网络上的其他机器可以访问 Verdaccio,我还必须将以下内容添加到 Verdaccio 的配置文件中:

listen:
  0.0.0.0:4873
于 2022-01-25T14:21:26.890 回答