从 npm 下载源代码而不安装它
Posted
技术标签:
【中文标题】从 npm 下载源代码而不安装它【英文标题】:Download source from npm without installing it 【发布时间】:2013-02-08 18:08:36 【问题描述】:如何在不实际安装的情况下从 npm 下载包的源代码(即不使用npm install thepackage
)?
【问题讨论】:
【参考方案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`
注意反引号``,在***上我看不清楚。
“v”只是视图的另一个别名:
https://docs.npmjs.com/cli/view
【讨论】:
此命令为您提供到 tarball 的直接链接。 registry.npmjs.org/packagename/-/packagename-version.tgz【参考方案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
【讨论】:
以上是关于从 npm 下载源代码而不安装它的主要内容,如果未能解决你的问题,请参考以下文章