【问题标题】:Download a package from npm as a tar (not installing it to a module)从 npm 下载一个包作为 tar(不将其安装到模块中)
【发布时间】:2015-11-04 20:02:36
【问题描述】:

是否有一些 URL 可以让我从 npm 下载给定的包(作为 tarball 或其他东西)?我需要最初上传到 npm 的确切文件。

例如,使用 npm install 会得到一个不同的生成的 package.json。我想要已发布的确切原始文件集。

【问题讨论】:

    标签: npm


    【解决方案1】:

    您可以使用npm view 获取注册表压缩包的URL(在此示例中为模块level):

    $ npm view level dist.tarball
    

    要下载压缩包,你可以使用npm pack:

    $ npm pack level
    

    【讨论】:

    • npm pack <module_name> 正是我需要在 dockerfile 的第一阶段从经过身份验证的注册表下载 npm 模块,然后将其复制到最后阶段(无法访问凭据)
    • 再次强调一下,因为它相当不直观:npm pack <package-name> 确实会下载压缩包,尽管您可能对命名有什么期望。无需使用npm view 命令。
    • 有没有办法获取以前版本的 tarball 下载 URL?所有这些命令似乎只适用于最新版本。
    • @VincentiusDaniel 您可以指定包的版本,如npm view react@16.0.0 dist.tarball,尽管最新版本为react@17.0.2,但现在产生https://registry.npmjs.org/react/-/react-16.0.0.tgz
    • 这正是我想要的。 npm pack 也直接下载到你的pwd
    【解决方案2】:

    运行npm pack PACKAGE_NAME 将在 npm 上下载任何包的 tarball。

    要提取它,只需运行tar -xzf DOWNLOADED_FILE.tgz

    示例:

    npm pack react
    

    然后提取:

    tar -xzf react-16.6.3.tgz
    

    【讨论】:

      【解决方案3】:

      只需运行命令

      npm view [package name] dist.tarball
      

      它会返回一个 tar url。

      【讨论】:

        【解决方案4】:

        如果您需要在未安装 npm 的情况下获取 tarball,您可以使用 curl 获取包信息并使用 jq 从 JSON 中获取正确的信息:

        curl https://registry.npmjs.org/PACKAGE-NAME/ \
            | jq '.versions[."dist-tags".latest].dist.tarball'
        

        例如,如果您正在构建一个需要一个 npm 包的 Docker 容器,并且不想为此安装 npm。

        【讨论】:

          【解决方案5】:

          是的,您可以npm install <git remote URL> 将完整的存储库下载到node_modules。不过,这将直接来自存储库的主机,而不是通过 npm。请参阅the npm install docs 了解更多信息。

          【讨论】:

          • 对不起,这不是我要求的。我想要上传到 npm 的文件,而不是 github 上的源文件(它们甚至可能不在 github 上)。而且我不想在 node_modules 中“安装”它们。我只想下载最初发布到 npm 的任何文件的 tar。
          • 啊,很公平。我应该通过评论要求澄清。
          猜你喜欢
          • 2011-10-23
          • 2015-08-21
          • 2010-12-24
          • 2021-06-22
          • 2012-09-17
          • 1970-01-01
          • 2011-08-20
          • 2016-01-26
          相关资源
          最近更新 更多