从 npm 下载源代码,但不安装它

如何从 npm 下载软件包的源代码而不实际安装它(即不使用 npm install thepackage) ?

93834 次浏览

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

下面是一个使用 wget下载 tarball 的示例:

wget $(npm view lodash dist.tarball)

在 linux 上,我通常下载这样的包的 tarball:

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

注意倒勾“ ,在 stackoverflow 上我无法清楚地看到它们。

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

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

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

npm pack XXX是输入速度最快的,它会下载一个归档文件。

或者:

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

此命令还将:

  • 下载带进度条的包
  • 提取到名为 package的文件夹中

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

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

基于 古斯塔沃 · 罗德里格斯的回答,修复了. 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

我的团队创建 OSS 小工具就是为了让这样的事情变得更容易,特别是在跨不同生态系统工作时。这个套件中的一个工具叫做 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 可能会有帮助。

为了简单地查看 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

您还可以使用 UNPKG访问 npm 包的内容

https://unpkg.com/browse/[package-name]@[package-version]/