【问题标题】:Does npm install have an equivalent to pip install --no-deps?npm install 是否与 pip install --no-deps 等效?
【发布时间】:2022-01-20 15:54:44
【问题描述】:

此时我对 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 安装一个特定的压缩包。但是,当我这样做时,它会尝试从在线 NPM 注册表中提取所需的依赖项,而不是从我已经拥有的 tarball 中提取依赖项。

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

TL;DR npm 是否有与 pip install /path/to/wheel/files/*.whl --no-deps 等价的东西?

【问题讨论】:

    标签: npm pip npm-install npm-publish verdaccio


    【解决方案1】:

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

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

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

    1. 在可以访问 Internet 的机器上,使用 npm init 创建一个 NPM 项目(我将我的项目称为“verdaccio_runner”)。我这样做的原因是,在无法访问互联网的机器上没有 NPM 注册表,很难在全球范围内安装 Verdaccio。
    2. 将此项目转移到无法访问互联网的机器上。
    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 将自己添加为用户,然后填写系统提示的信息。

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

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

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

    listen:
      0.0.0.0:4873
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2017-11-07
      • 2015-06-01
      相关资源
      最近更新 更多