Jak mogę skonfigurować program Visual Studio Code do kompilowania plików maszynopisu podczas zapisywania?
Widzę, że można skonfigurować zadanie, aby zbudować plik w fokusie, używając ${file}
jako argumentu. Ale chciałbym, aby było to zrobione, gdy plik jest zapisywany.
typescript
visual-studio-code
Powell Quiring
źródło
źródło
tsc <filename> --watch
terminalOdpowiedzi:
Aktualizacja z maja 2018 r .:
Od maja 2018 r. Nie trzeba już tworzyć
tsconfig.json
ręcznie ani konfigurować modułu uruchamiającego zadania.tsc --init
w folderze projektu, aby utworzyćtsconfig.json
plik (jeśli jeszcze go nie masz).tsc: watch - tsconfig.json
.Możesz mieć kilka
tsconfig.json
plików w swoim obszarze roboczym i uruchamiać wiele kompilacji na raz, jeśli chcesz (np. Osobno frontend i backend).Oryginalna odpowiedź:
Możesz to zrobić za pomocą poleceń kompilacji:
Utwórz prosty
tsconfig.json
z"watch": true
(poinstruuje kompilator, aby obserwował wszystkie skompilowane pliki):Zauważ, że
files
tablica jest pomijana, domyślnie wszystkie*.ts
pliki we wszystkich podkatalogach zostaną skompilowane. Możesz podać inne parametry lub zmienićtarget
/out
, po prostu upewnij się, żewatch
jest ustawiony natrue
.Skonfiguruj swoje zadanie ( Ctrl+Shift+P->
Configure Task Runner
):Teraz naciśnij, Ctrl+Shift+Baby zbudować projekt. Zobaczysz dane wyjściowe kompilatora w oknie danych wyjściowych ( Ctrl+Shift+U).
Kompilator skompiluje pliki automatycznie po zapisaniu. Aby zatrzymać kompilację, naciśnij Ctrl+P->
> Tasks: Terminate Running Task
Stworzyłem szablon projektu specjalnie dla tej odpowiedzi:
typescript-node-basic
źródło
configure task
: VSCode automatycznie wykryje, że jesttsconfig.json
i wyświetli okno dialogowe, w którym możesz wybraćtsc: build - tsconfig.json
lubtsc: watch - tsconfig.json
. Wybierz to drugie, a VSCode wygenerujetasks.json
plik (jeśli wcześniej go nie było) i doda odpowiednią konfigurację dla Ciebie.Jeśli chcesz uniknąć konieczności używania
CTRL
+SHIFT
+B
i zamiast tego chcesz, aby działo się to za każdym razem, gdy zapisujesz plik, możesz powiązać polecenie z tym samym skrótem, co akcja zapisywania:Znajduje się to w twoim keybindings.json - (przejdź do tego za pomocą Plik -> Preferencje -> Skróty klawiaturowe).
źródło
when
warunek `usingeditorLangId
jest importowany.Jeśli naciśniesz Ctrl+ Shift+B wydaje się być dużym wysiłkiem, możesz włączyć „Automatyczne zapisywanie” (Plik> Automatyczne zapisywanie) i używać NodeJS do oglądania wszystkich plików w projekcie i automatycznie uruchamiać TSC.
Otwórz wiersz polecenia Node.JS, zmień katalog na folder główny projektu i wpisz następujące polecenie;
I hej, presto, za każdym razem, gdy VS Code automatycznie zapisze plik, TSC go przekompiluje.
Ta technika jest wspomniana w poście na blogu;
http://www.typescriptguy.com/getting-started/angularjs-typescript/
Przewiń w dół do „Kompiluj przy zapisywaniu”
źródło
Napisz rozszerzenie
Teraz, gdy vscode jest rozszerzalny, można podłączyć się do zdarzenia przy zapisywaniu za pośrednictwem rozszerzenia. Dobry przegląd pisania rozszerzeń dla VSCode można znaleźć tutaj: https://code.visualstudio.com/docs/extensions/overview
Oto prosty przykład, który po prostu wywołuje
echo $filepath
i wyświetla standardowe wyjście w dialogu wiadomości:(Przywołane również w tym pytaniu SO: https://stackoverflow.com/a/33843805/20489 )
Istniejące rozszerzenie VSCode
Jeśli chcesz po prostu zainstalować istniejące rozszerzenie, oto takie, które napisałem, dostępne w galerii VSCode: https://marketplace.visualstudio.com/items/emeraldwalk.RunOnSave
Kod źródłowy jest dostępny tutaj: https://github.com/emeraldwalk/vscode-runonsave/blob/master/src/extension.ts
źródło
Z trudem starałem się uzyskać pożądane zachowanie. Jest to najłatwiejszy i najlepszy sposób na skompilowanie plików TypeScript przy zapisywaniu, do żądanej konfiguracji, tylko TEN plik (zapisany plik). To jest tasks.json i keybindings.json.
źródło
{ "version": "0.1.0", "command": "tsc", "isShellCommand": true, "args": ["--module","amd","--target","ES5","${file}"], "showOutput": "silent", "problemMatcher": "$tsc" }
klawisze:{ "key": "cmd+s", "command": "workbench.action.tasks.build", "when":"editorTextFocus && editorLangId == 'typescript'" }
Zamiast budować pojedynczy plik i wiązać Ctrl + S, aby wywołać tę kompilację, poleciłbym uruchomić tsc w trybie obserwacyjnym przy użyciu następującego pliku tasks.json:
Spowoduje to zbudowanie całego projektu, a następnie odbudowanie zapisanych plików niezależnie od sposobu ich zapisania (Ctrl + S, automatyczne zapisywanie, ...)
źródło
Zaktualizowano
W Twoim
tsconfig.json
jeśli problem nadal występuje, wykonaj jedną z następujących czynności:
Zrestartuj swój edytor lub zmień dowolną trasę, przywróć ją i zapisz aplikację. Zacznie się kompilować. to znaczy
źródło
Zaimplementowałem kompilację przy zapisywaniu za pomocą zadania gulp przy użyciu skryptu gulp i kompilacji przyrostowej. Pozwala to na dowolną kontrolę kompilacji. Zwróć uwagę na moją zmienną tsServerProject, w moim prawdziwym projekcie mam również tsClientProject, ponieważ chcę skompilować mój kod klienta bez określonego modułu. Jak wiem, nie da się tego zrobić za pomocą vs code.
źródło
Wybierz Preferencje -> Ustawienia obszaru roboczego i dodaj następujący kod.Jeśli masz włączone ponowne ładowanie na gorąco, zmiany są natychmiast odzwierciedlane w przeglądarce
źródło
Aktualny stan tego wydania:
https://github.com/Microsoft/vscode/issues/7015
źródło
Mogę powiedzieć, że przy najnowszej wersji TypeScript 1.8.X i 1.0 kodu Visual Studio technika, którą pokazałem, jest przestarzała. Po prostu użyj tsconfig.json na poziomie głównym projektu, a wszystko działa automatycznie do sprawdzania składni. Następnie użyj tsc -w w wierszu poleceń do automatycznego oglądania / ponownej kompilacji. Czyta ten sam plik tsconfig.json dla opcji i konfiguracji kompilacji ts.
źródło
Niezwykle prostym sposobem automatycznej kompilacji po zapisaniu jest wpisanie w terminalu:
tsc main --watch
gdzie
main.ts
jest twoja nazwa pliku.Uwaga, będzie to działać tylko tak długo, jak długo ten terminal będzie otwarty, ale jest to bardzo proste rozwiązanie, które można uruchomić podczas edycji programu.
źródło
tsc -w
działa także dla wszystkich plików maszynopisu w projekcieMusisz zwiększyć limit zegarków, aby naprawić problem rekompilacji podczas zapisywania, otwórz terminal i wprowadź te dwa polecenia:
Aby zmiany były trwałe nawet po ponownym uruchomieniu, uruchom również to polecenie:
źródło
wypróbowałem powyższe metody, ale mój zatrzymał automatyczną kompilację, gdy wydawało się, że tak się stało, ponieważ maksymalna liczba plików do obejrzenia przekroczyła limit.
uruchom
cat /proc/sys/fs/inotify/max_user_watches
polecenie.jeśli pokazuje mniej plików, w tym node_modules, otwórz plik
/etc/sysctl.conf
z uprawnieniami roota i dołączfs.inotify.max_user_watches=524288
do pliku i zapiszuruchom ponownie polecenie cat, aby zobaczyć wynik. To będzie działać! ufnie!
źródło
Używam automatycznych zadań uruchamianych na folderze (powinien działać VSCode> = 1.30) w .vscode / tasks.json
Jeśli to nadal nie działa w folderze projektu otwórz, spróbuj Ctrl + shift + P i Zadania: Zarządzaj automatycznymi zadaniami w folderze i wybierz „Zezwalaj na automatyczne zadania w folderze” w głównym folderze projektu lub folderze uruchomionym.
źródło