instalacja npm z Git w określonej wersji

Założyłem, że napisałem moduł dla Node.js, które chciałbym zachować prywatnie. Wiem, że mogę (powinienem) dodać wiersz:

"private": "true"

Do pliku package.json, i wiem również, że mogę npm install Ten moduł użyć ścieżki systemu plików lub linku do repozytorium git, w tym GitHub.

Wiem też, że mogę umieścić taką ścieżkę systemu plików lub link do repo Gita w package.json, Aby dependencies część mogła wyglądać mniej więcej tak:

"dependencies": {
  "myprivatemodule": "[email protected]:..."
}

To, czego teraz chcę, to nie linkować do najnowsza wersja, ale do konkretnej. Jedyną możliwą możliwością, o której wiem, jest link do konkretnego commita za pomocą jego ID. Ale jest to o wiele mniej czytelne i gorsze do utrzymania niż użycie numeru wersji, takiego jak 0.3.1.

Moje pytanie brzmi: czy możliwe jest podanie takiego numeru wersji i zmuszenie npm do przeszukania repozytorium git pod kątem najnowszego commita, który zawiera tę wersję?

Jeśli nie, jak rozwiązać ten problem w swoich projektach? Czy mieszkasz z identyfikatorem commit lub czy istnieje lepsze rozwiązanie?

 116
Author: Zeeshan Hassan Memon, 2013-01-07

6 answers

A zależność musi być dostępna z registry do zainstalowania poprzez podanie deskryptora version .

Z pewnością możesz utworzyć i używać własnego rejestru zamiast registry.npmjs.org jeśli twoje projekty nie powinny być udostępniane publicznie.

Ale jeśli nie ma go w rejestrze, będzie musiał być odwołany przez URL lub Git URL. Aby określić wersję z adresem URL Git, Dołącz odpowiednie <commit-ish>, takie jako znacznik, na końcu jako fragment adresu URL .

Przykład dla tagu o nazwie 0.3.1:

"dependencies": {
  "myprivatemodule": "[email protected]:...#0.3.1"
}

Uwaga: powyższy fragment pokazuje bazowy adres URL taki sam, jaki został opublikowany w pytaniu.

Porcja wycięta (...) powinna być wypełniona:

"myprivatemodule": "[email protected]:{owner}/{project}.git#0.3.1"

I, inny format adresu będzie potrzebny, gdy dostęp SSH nie jest dostępny:

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

W zależności od systemu operacyjnego możesz także link na zależność w innym folderze, w którym została sklonowana z Github.

 133
Author: Jonathan Lonowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 15:57:17

Zaakceptowana odpowiedź nie zadziałała na mnie. Oto co robię, aby pobrać pakiet z Githuba:

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}
 163
Author: surjikal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-17 18:16:13

Jeśli przez wersję masz na myśli tag lub release, to github udostępnia dla nich linki do pobierania. Na przykład, jeśli chcę zainstalować fetch w wersji 0.3.2( nie jest dostępna na npm), to dodaję do mojego package.json Pod dependencies:

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

Jedyną wadą w porównaniu z podejściem commit hash jest to, że hash jest gwarantowany, że nie reprezentuje zmienionego kodu, podczas gdy tag może zostać zastąpiony. Na szczęście zdarza się to rzadko.

Update:

These days the podejście, którego używam, to notacja zwarta Dla zależności obsługiwanej przez GitHub:

"dependencies": {
  "package": "github:username/package#commit"
}

Gdzie commit może być cokolwiek, jak znacznik. W przypadku Githuba możesz nawet porzucić inicjał github:, ponieważ jest to domyślne.

 55
Author: qubyte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-17 18:17:38

Mój przykładowy komentarz do @qubyte powyżej został pocięty, więc tutaj jest coś łatwiejszego do odczytania...

Metoda @ surjikal opisana powyżej działa dla commitów gałęzi, ale nie działa dla drzewa commitów, które próbowałem załączyć.


Tryb archiwum działa również dla commitów. Na przykład, fetch @ a2fbf83

Npm :

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

Przędza :

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

Format :

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


Oto drzewo commit, które wymagało trybu /archive/:
yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

Dla powiązanych vuex commit

 5
Author: bvj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-03 06:43:49

Jeśli robisz to z więcej niż jednym modułem i chcesz mieć większą kontrolę nad wersjami, powinieneś zajrzeć do posiadania własnego prywatnego rejestru npm.

W ten sposób możesz npm publikować swoje moduły w prywatnym rejestrze npm i używać pakietu.wpisy json w taki sam sposób jak dla publicznych modułów.

Https://docs.npmjs.com/files/package.json#dependencies

 1
Author: Igor Soarez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-24 15:01:30

To polecenie instaluje pakiet npm username/package z określonego commita git:

npm install https://github.com/username/package#3d0a21cc

Tutaj {[2] } znajduje się pierwsze 8 znaków skrótu commit.

 0
Author: Prisacari Dmitrii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-27 14:34:33