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?
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.
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"
}
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.
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
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.
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.
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