如何从npm下载软件包的源代码而不实际安装(即不使用npm install thepackage
)?
Answers:
您可以使用npm view [package name] dist.tarball
which返回压缩包文件的URL。
这是wget
用于下载压缩包的示例:
wget $(npm view lodash dist.tarball)
一种更简单的方法是npm pack <package_name>
。这将从注册表中检索tarball,将其放在npm缓存中,然后将副本放入当前工作目录中。参见https://docs.npmjs.com/cli/pack
npm pack --dry-run <package_name>
将产生相同的准确输出,而无需将tgz
文件放在当前目录中。
如果尚未使用当前的公共API安装npm,则还可以从URL访问npm注册表中有关软件包的信息https://registry.npmjs.org/<package-name>/
。
然后,您可以浏览JSON,versions > (version number) > dist > tarball
以获取代码档案的URL并下载。
在linux上,我通常下载如下软件包的压缩包:
wget `npm v [package-name] dist.tarball`
注意反引号``,在stackoverflow上我看不到它们。
“ v”只是视图的另一个别名:
根据Gustavo Rodrigues的回答,修复.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
npm pack <package's name>
是目前最短的方法