Pobierz źródło z npm bez instalowania go

85

Jak mogę pobrać kod źródłowy pakietu z npm bez faktycznej instalacji (tj. Bez używania npm install thepackage)?

AURIGADL
źródło

Odpowiedzi:

84

Możesz użyć, npm view [package name] dist.tarballktóry zwróci adres URL skompresowanego pliku pakietu.

Oto przykład użycia wgetdo pobrania tarballa:

wget $(npm view lodash dist.tarball)
Gustavo Rodrigues
źródło
8
npm pack <package's name>jest najkrótszą obecną drogą
pojawił się
Ocena obniżona, ponieważ nie używa to informacji uwierzytelniających npm i powoduje błędy 401 dla pakietów prywatnych.
Der Hochstapler
59

Prostszym sposobem na to jest npm pack <package_name>. Spowoduje to pobranie archiwum tar z rejestru, umieszczenie go w pamięci podręcznej npm i umieszczenie kopii w bieżącym katalogu roboczym. Zobacz https://docs.npmjs.com/cli/pack

grahamaj
źródło
Doskonały. Ponadto: npm pack --dry-run <package_name>zwróci dokładnie to samo wyjście, bez umieszczania tgzpliku w bieżącym katalogu.
friederbluemle
43

Jeśli nie zainstalowałeś npm , z obecnym publicznym API, możesz również uzyskać dostęp do informacji o pakiecie w rejestrze npm z adresu URL https://registry.npmjs.org/<package-name>/.

Następnie możesz przejść do JSON pod adresem, versions > (version number) > dist > tarballaby uzyskać adres URL archiwum kodu i pobrać go.

Matteo T.
źródło
1
Dziękuję Ci! To jest to, czego szukałem
Aditya Vikas Devarapalli
28

npm pack XXX jest najszybszy do wpisania i pobierze archiwum.

Alternatywnie:

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

to polecenie również:

  • Pobierz pakiet z paskiem postępu
  • Wyodrębnia do folderu o nazwie package
fregante
źródło
0

Opierając się na odpowiedzi Gustavo Rodriguesa , naprawia katalog „pakiet” w .tgz, dodaje najnowsze wykrywanie wersji pomocniczych.

#!/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
źródło