【问题标题】:Download source from npm without installing it从 npm 下载源代码而不安装它
【发布时间】:2013-02-08 18:08:36
【问题描述】:

如何在不实际安装的情况下从 npm 下载包的源代码(即不使用npm install thepackage)?

【问题讨论】:

    标签: node.js package npm


    【解决方案1】:

    您可以使用npm view [package name] dist.tarball,它将返回压缩包文件的URL。

    这是一个使用wget 下载压缩包的示例:

    wget $(npm view lodash dist.tarball)
    

    【讨论】:

    • npm pack <package's name> 是目前最短的方式
    • 投反对票,因为这不使用 npm 身份验证信息并导致私有包出现 401 错误。
    • 像 jquery@2 这样的脱字符号版本会导致返回多个 URL
    【解决方案2】:

    在 linux 上,我通常会像这样下载一个包的 tarball:

    wget `npm v [package-name] dist.tarball`
    

    注意反引号``,在stackoverflow上我看不清楚。

    “v”只是视图的另一个别名:

    https://docs.npmjs.com/cli/view

    【讨论】:

    【解决方案3】:

    一个更简单的方法是npm pack <package_name>。这将从注册表中检索 tarball,将其放在 npm 缓存中,并将副本放在当前工作目录中。见https://docs.npmjs.com/cli/pack

    【讨论】:

    • 完美。另外:npm pack --dry-run <package_name> 将产生完全相同的输出,而不会将 tgz 文件放在当前目录中。
    【解决方案4】:

    npm pack XXX 是最快的输入,它会下载一个存档。

    或者:

    npm v XXX dist.tarball | xargs curl | tar -xz
    

    此命令还将:

    • 下载带有进度条的包
    • 解压到名为package 的文件夹中

    【讨论】:

    • 此外,如果您想保持与注册表相同的文件名,您可以跳过最后一个管道,如:npm v XXX dist.tarball | xargs curl -O。在这种情况下, curl -O 将保留 npm 注册表中的文件名,并且由于该文件已经是 tar.gz ,因此无需通过 tar 命令再次对其进行管道传输。
    【解决方案5】:

    如果你还没有安装 npm,使用当前的公共 API,你还可以通过 URL https://registry.npmjs.org/<package-name>/ 访问 npm 注册表中有关包的信息。

    然后您可以在 versions > (version number) > dist > tarball 导航 JSON 以获取代码存档的 URL 并下载它。

    【讨论】:

      【解决方案6】:

      基于Gustavo Rodrigues's answer,修复.tgz中的“package”目录,增加最新的小版本发现。

      #!/bin/bash
      
      if [[ $# -eq 0 ]] ; then
          echo "Usage: $0 jquery bootstrap@3 tinymce@4.5"
          exit 64 ## EX_USAGE
      fi
      
      set -e ## So nothing gets deleted if download fails
      
      for pkg_name in "$@"
      do
      
          ## Get latest version, also works with plain name
          url=$( npm v $pkg_name dist.tarball | tail -n 1 | cut -d \' -f 2 )
          tmp_dir=$( mktemp -d -p . "${pkg_name}__XXXXXXXXX" )
      
          ## Unpacks to directory named after package@version
          curl $url | tar -xzf - --strip 1 --directory $tmp_dir
          rm -rf $pkg_name
          mv $tmp_dir $pkg_name
      done
      

      【讨论】:

        【解决方案7】:

        我的团队创建了OSS Gadget 来简化此类操作,尤其是在跨不同生态系统工作时。该套件中的一个工具称为oss-download:

        oss-download pkg:npm/express         # Latest version
        oss-download pkg:npm/express@4.17.1  # Specific version
        oss-download pkg:npm/express@*       # All versions
        oss-download -e pkg:npm/express      # Decompress contents recursively
        

        如果你只对 npm 感兴趣,那么npm pack 是你最好的选择,但如果你没有安装 npm 或者需要用 PyPI、RubyGems、NuGet 等做类似的事情,那么 OSS Gadget 可能乐于助人。

        【讨论】:

          【解决方案8】:

          为了简单地查看 npm 包的内容概览,无需在本地下载任何内容,您可以使用:

          npm pack --dry-run <package-name>
          

          演示:

          $ npm pack --dry-run express
          npm notice
          npm notice ?  express@4.17.2
          npm notice === Tarball Contents ===
          npm notice 110.6kB History.md
          npm notice 1.2kB   LICENSE
          npm notice 4.8kB   Readme.md
          npm notice 224B    index.js
          npm notice 14.3kB  lib/application.js
          npm notice 2.4kB   lib/express.js
          npm notice 853B    lib/middleware/init.js
          npm notice 885B    lib/middleware/query.js
          npm notice 12.5kB  lib/request.js
          npm notice 27.3kB  lib/response.js
          npm notice 15.0kB  lib/router/index.js
          npm notice 3.3kB   lib/router/layer.js
          npm notice 4.1kB   lib/router/route.js
          npm notice 5.9kB   lib/utils.js
          npm notice 3.3kB   lib/view.js
          npm notice 2.8kB   package.json
          npm notice === Tarball Details ===
          npm notice name:          express
          npm notice version:       4.17.2
          npm notice filename:      express-4.17.2.tgz
          npm notice package size:  54.7 kB
          npm notice unpacked size: 209.6 kB
          npm notice shasum:        c18369f265297319beed4e5558753cc8c1364cb3
          npm notice integrity:     sha512-oxlxJxcQlYwqP[...]66Ha8jCUo9QGg==
          npm notice total files:   16
          npm notice
          express-4.17.2.tgz
          

          【讨论】:

            猜你喜欢
            • 2016-06-07
            • 2011-09-17
            • 2018-11-29
            • 2020-08-23
            • 2017-06-02
            • 1970-01-01
            • 2017-11-10
            • 2021-10-22
            • 2022-07-13
            相关资源
            最近更新 更多