2017-07-18 49 views
12

Używam TypeScript 2 w moim projekcie. Chciałbym użyć biblioteki js, ale także typowania dla tej biblioteki. Mogę instalować typy z prostym npm install @types/some-library. Nie jestem pewien, czy powinienem je wykonać: --save lub --save-dev. Wydaje mi się, że nawet DefinetelyTyped readme rodzaju GitHub wspomina obie wersje, ale nigdy ich nie wyjaśnia. Myślę, że @types powinien być w devDependencies, ponieważ typy są potrzebne do rozwoju i nie są używane w środowisku wykonawczym, ale widziałem wiele razy @types tylko w dependencies. Jestem zmieszany.Jak mogę zdecydować, czy @ types/* przechodzi do `dependencies` lub` devDependencies`?

Jak powinienem zdecydować, czy @ types/* przechodzi w dependencies lub devDependencies? Czy rzeczywiście istnieją jakieś mniej lub bardziej oficjalne instrukcje?

+0

Czy generujesz pakiet lub czy jest to pakiet, z którego będą korzystać inni? Jak widzę, w tym drugim przypadku trzeba jedynie rozróżnić "zależności" od "zależności dewspozycji". – Valentin

+0

Tworzę grę w js/ts od zera. Łączę wszystko z pakietem internetowym. W żadnym bankomacie nie ma backendu, ale możliwe, że zapakuję to wszystko w Electrona, aby pewnego dnia stał się niezależny. Nie sądzę, by ktokolwiek używał go jako zależności w swojej własnej aplikacji, ale myślę, że to może być możliwe (pomyśl o mini-grach w grach GTA, a moja gra jest open source). Mimo to chcę się uczyć i stosować najlepsze praktyki i to jest główny powód, dla którego robię tę grę. Mam nadzieję, że wystarczająco dobrze wyjaśniłem mój przypadek użycia. :) – kamyl

+1

Tak, to ma sens, chciałem tylko upewnić się, że moja oryginalna odpowiedź była adekwatna do twojego przypadku użycia. Nadal uważam, że rozróżnienie między 'devDependencies' i' dependencies' jest nieistotne podczas budowania pakietu, jest to coś, co 'create-react-app' wymusza [także] (https://stackoverflow.com/a/44872787/1333383) ale ostatecznie od Ciebie zależy, czy wybierzesz – Valentin

Odpowiedz

11

Załóżmy, że tworzysz pakiet "A", który ma pakiet @ types/some-module in devDependencies. Z jakiegoś powodu jesteś eksportu typ od jakiegoś @ typów/module

import {SomeType} from 'some-module'; 
export default class APackageClass { 
    constructor(private config: SomeType) { 

    } 
} 

Teraz maszynopis konsumenci pakietu „A” nie są w stanie odgadnąć, co SomeType jest od devDependencies pakietu „A” NIE są zainstalowane .

W tym konkretnym przypadku POTRZEBA umieścić pakiet @ types/* ze zwykłymi "zależnościami". W innych przypadkach "zależności" są wystarczająco dobre.

+1

. Sugerujesz, że jeśli używam tylko tego typu w implementacji, to jego definicja może być 'devDependencies'? –

+1

Tak @FranklinYu. Jak tylko typ pojawi się w pliku deklaracji, musisz umieścić go na 'dependencies'. W przeciwnym razie 'devDependencies' jest w porządku – wookieb

6

Czy generujesz pakiet? Jeśli tak, proponuję nie spędzać zbyt wiele czasu na debatowaniu nad tym, co się dzieje. devDependencies i dependencies mają znaczenie tylko wtedy, gdy publikujesz pakiet, który może być używany przez innych i nie chcesz spamować ich bezużytecznymi zależnościami.

TL; DR umieść go w devDependencies. Tak jak powiedziałeś "typy są potrzebne do programowania i nie są używane w środowisku wykonawczym".