Descarga la fuente de npm sin instalarla

84

¿Cómo puedo descargar el código fuente de un paquete de npm sin realmente instalarlo (es decir, sin usar npm install thepackage)?

AURIGADL
fuente

Respuestas:

83

Puede usar npm view [package name] dist.tarballque devolverá la URL del archivo del paquete comprimido.

Aquí hay un ejemplo de uso wgetpara descargar el tarball:

wget $(npm view lodash dist.tarball)
Gustavo Rodrigues
fuente
8
npm pack <package's name>es el camino actual más corto
revelt
Se votó en contra porque esto no usa información de autenticación npm y da como resultado errores 401 para paquetes privados.
Der Hochstapler
59

Una forma más sencilla de hacerlo es npm pack <package_name>. Esto recuperará el tarball del registro, lo colocará en su caché npm y colocará una copia en el directorio de trabajo actual. Ver https://docs.npmjs.com/cli/pack

grahamaj
fuente
Perfecto. Además: npm pack --dry-run <package_name>producirá exactamente la misma salida, sin colocar el tgzarchivo en el directorio actual.
friederbluemle
40

Si no ha instalado npm , con la API pública actual, también puede acceder a la información sobre un paquete en el registro de npm desde la URL https://registry.npmjs.org/<package-name>/.

Luego, puede navegar por JSON en versions > (version number) > dist > tarballpara obtener la URL del archivo de código y descargarlo.

Matteo T.
fuente
1
¡Gracias! Esto es lo que estaba buscando
Aditya Vikas Devarapalli
28

npm pack XXX es el más rápido de escribir y descargará un archivo.

Alternativamente:

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

este comando también:

  • Descarga el paquete con barra de progreso
  • Se extrae en una carpeta llamada package
fregante
fuente
0

Basado en la respuesta de Gustavo Rodrigues , corrige el directorio "paquete" en .tgz, agrega el último descubrimiento de versiones menores.

#!/bin/bash

if [[ $# -eq 0 ]] ; then
    echo "Usage: $0 jquery bootstrap@3 [email protected]"
    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
Sergey Nagaytsev
fuente