Używam TypeScript 2 w moim projekcie. Chciałbym użyć biblioteki js, ale także pisania dla tej biblioteki. Mogę instalować typy za pomocą prostego npm install @types/some-library
. Nie jestem pewien, czy powinienem --save
czy --save-dev
oni. Wydaje mi się, że nawet ReadetetTyped GitHub w pewnym sensie wspomina o obu wersjach, ale nigdy ich nie wyjaśnia. Wydaje mi się, że @typy powinny być włączone devDependencies
, ponieważ typy są potrzebne do programowania i nie są używane w środowisku wykonawczym, ale widziałem wiele razy @typy w właśnie dependencies
. Jestem zmieszany.
Jak zdecydować, czy @ typy / * przejdzie do dependencies
czy devDependencies
? Czy faktycznie są jakieś mniej lub bardziej oficjalne instrukcje?
dependencies
idevDependencies
drugim przypadkiem.devDependencies
idependencies
nie ma znaczenia, gdy buduje pakiet, to jest coś, cocreate-react-app
wymusza jak dobrze , ale w końcu to do ciebie, aby wybraćOdpowiedzi:
Załóżmy, że tworzysz pakiet „A”, który ma pakiet @ types / some-module w devDependencies. Z jakiegoś powodu eksportujesz typ z @ types / some-module
W tej chwili konsumenci maszynopisu pakietu „A” nie są w stanie odgadnąć, czym jest SomeType, ponieważ NIE są zainstalowane devDependencies pakietu „A”.
W tym konkretnym przypadku POTRZEBUJESZ umieścić pakiet @ types / * ze zwykłymi „zależnościami”. W innych przypadkach „devDependencies” są wystarczająco dobre.
źródło
devDependencies
?dependencies
. W przeciwnym raziedevDependencies
jest w porządkudependencies
spowoduje rozdęcie drzewa zależności.Jeśli tylko generujesz pakiet, może nie być konieczne rozróżnienie między
dependencies
idevDependencies
. Ta funkcjanpm
jest na ogół przydatna podczas publikowania pakietu, z którego mogą korzystać inni i nie chcesz spamować ich zbędnymi zależnościami.Mogą istnieć inne przypadki użycia, w których podział zależności może być pomocny, ale chyba że masz wyraźną potrzebę, to radzę wybrać jedną z nich i umieścić tam wszystko. Podział ich później nie jest trudny, jeśli zajdzie taka potrzeba.
Dobrze znanym przykładem tej praktyki IRL jest
create-react-app
, domyślnie, niewyciskany bojler, w którym wszystko umieszczadependencies
, zobacz ten wątek i tę odpowiedźźródło
devDependencies
nie są instalowane, gdy to robisznpm install --production
(lubnpm ci --production
), a zatem nie są dostępne podczas uruchamiania kodu produkcyjnego. Jest to bardzo znacząca różnica dla usługi, a nie tylko biblioteki.W szczególnym przypadku wdrażania aplikacji Node.js w środowisku produkcyjnym chce się zainstalować tylko zależności potrzebne do uruchomienia aplikacji.
npm install --production
lubnpm ci --production
lubyarn --production
W takim przypadku typy powinny znajdować się w
devDependencies
, aby zapobiec rozdęciu instalacji.Uwaga: Wiem, że wspomniano o tym w komentarzu Brada Wilsona do innej odpowiedzi. Ta kwestia wydaje się jednak warta odpowiedzi.
źródło