2017-07-11 28 views
6

Chcę użyć maszynopisu, a następnie kompilacji zamknięcie (kompilacja zaawansowana) do kierowania na ES5 i minimalizowania danych wyjściowych.Kompilator zamykania + opis maszynowy

Czy muszę używać tsickle zamiast tsc? Brakuje mu wsparcia dla wszystkich opcji tsc i jest bardzo ambitny, ponieważ chce przetłumaczyć typy Typescript na typy Zamknięcia (które nie są w 100% kompatybilne). Tak naprawdę nie potrzebuję używać typów Zamknięcia; Potrzebuję tylko zmiany nazwy/minifikacji.

Czy mogę użyć tsc do kompilowania modułów Typescript do ES6 i użyć Kompilatora zamykania w celu zminimalizowania tych (bez sprawdzania typu lub optymalizacji typu)?

Bonus: Czy ta odpowiedź ulegnie zmianie, jeśli chcę korzystać z biblioteki zamknięcia?

+0

Tylko Angularne urządzenie rdzenia mogło prawidłowo odpowiedzieć na to pytanie. –

+0

@ChadKillingsworth, ale nie jest to aplikacja Angular. –

+0

Wiem - ale są to jedyni twórcy, o których wiem, że rozumieją ten krajobraz na tym poziomie. Kompilator maszynopisów, tsickle i kompilator zamykania - to dość specyficzny zbiór wiedzy. I to jest bardzo nietrywialne pytanie. –

Odpowiedz

4

Z technicznego punktu widzenia można pobrać wyjście ES6 z tsc i od razu podłączyć je do kompilatora, ponieważ ten ostatni ma przyjąć JS jako dane wejściowe. Robimy to już w wielu miejscach, np. Skośne aplikacje skompilowane z kompilatorem zamykającym pobierają dystrybucję biblioteki rxjs i dołączają ją do pakietu zamknięcia. Zobacz https://github.com/angular/closure-demo

W praktyce znajdujemy kilka powodów, aby użyć czegoś takiego jak tsickle, aby przekształcić JS, zanim Closure go zobaczy.

  • enums emitują nie działa w zamknięcie (lub pakiet IIUC)
  • Zamknięcie ma pewne ograniczenia z ES6, na przykład, że obecnie nie obsługuje export * - tsickle re-pisze, że do export {each, visible, symbol}
  • dodanie Adnotacje JSDoc pomagają w zrozumieniu struktury kodu, co może poprawić optymalizację i zmniejszyć liczbę ostrzeżeń, które drukuje.

Nasz obecny plan polega na rozłożeniu karsi na wiele transformacji emitujących TS 2.3, wtedy możemy być bardziej zrozumiale, które transformacje faktycznie muszą być włączone w kompilatorze.

Dodawanie typów jest opcjonalne. Jeśli wyłączysz tryb wpisywania tekstu, po prostu wydrukujemy {?} dla typów. Jednakże, jeśli kiedykolwiek będziesz chciał użyć wyjścia TypeScript z kodu JS zamknięcia, będziesz potrzebował sprawdzania typu zamknięcia, aby poznać typy.

Jeśli grasz na nowe narzędzie do budowania, w pewnym momencie zbudujemy karę w łańcuchu narzędziowym firmy Bazel pod numerem https://github.com/bazelbuild/rules_typescript. W międzyczasie możesz złożyć wniosek o funkcję dla głównej bazy Tsickle, aby obsługiwała więcej flag linii poleceń. (Ale myślę, że Lucidchart już trzyma widelec Tsickle'a?)

+0

Robimy :) Również bazel wygląda świetnie, ale jeszcze go nie używamy. Śledziłem plan, odkąd został on po raz pierwszy ogłoszony. –