Funkcja „Kompiluj przy zapisywaniu” języka TypeScript nie działa w programie Visual Studio 2015

85

Funkcja „Kompiluj przy zapisywaniu” nie działa po uaktualnieniu do programu Visual Studio 2015. Kiedy wprowadzam zmiany w .tspliku w moim projekcie i zapisuję, na pasku stanu na dole środowiska IDE jest wyświetlany komunikat Output(s) generated successfully, ale wygenerowany .jsplik nie nie zmienia się.

Oto, czego próbowałem:

  • dodanie następujących elementów do <Project>elementu głównego w my .csproj:

    <PropertyGroup>
        <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    </PropertyGroup>
    
  • zaznaczenie i odznaczenie opcji „Automatycznie kompiluj pliki TypeScript, które nie są częścią projektu” w Tools -> Options -> TypeScript -> Project:

    wprowadź opis obrazu tutaj

  • podwójne sprawdzenie, czy opcja „Kompiluj przy zapisywaniu” jest zaznaczona we właściwościach kompilacji TypeScript mojego projektu:

    wprowadź opis obrazu tutaj

czego mi brakuje?

Na marginesie, krok kompilacji TypeScript działa zgodnie z oczekiwaniami po wyzwoleniu przez zwykłą kompilację.

Nathan Friend
źródło
Sprawdź, czy pliki JS w rzeczywistości NIE są aktualizowane. Przez jakiś czas napotkałem problem z VS2013, w którym `` Podgląd JS '' nie aktualizował się, ale pliki JS były faktycznie aktualizowane. Otwórz go ręcznie, aby sprawdzić, czy kod został zaktualizowany. Przyczyna tego była nieznana, ale rozwiązaniem było wyłączenie VS i ponowne otwarcie. Nie próbowałem jeszcze budować żadnych plików TS w VS2015.
Jason H
1
Zepsuli to dla RTM. Zobacz to pytanie stackoverflow.com/questions/31559653/…
Simon_Weaver
1
Pracuję, gdy prowadzisz Visual Studio jako administrator!
alisabzevari
@alisabzevari Dzięki za sugestię, ale praca jako administrator nie rozwiązuje tego problemu.
Nathan Friend

Odpowiedzi:

140

Dla mnie była to taka opcja w tsconfig.json:

"compileOnSave": true,
"compilerOptions": { ... },

Uruchom ponownie program Visual Studio, aby ta zmiana zaczęła obowiązywać.

Miłosz Wierzbicki
źródło
Używając angular2, zaktualizowałem między innymi mój maszynopis dla rc1 i naturalnie wszystko się zepsuło, aż w końcu stwierdziłem, że to mój problem. Nie potrzebowałem tego, dopóki nie zaktualizowałem do wersji 1.8.10.
James
5
tak, dodaj opcję w tsconfig.json i ponownie załaduj projekt, jeśli projekt jest hostowany w rozwiązaniu VS. Następnie ts zostanie skompilowany do js podczas zapisywania.
ZZZ
1
Dodawanie "watch": truedo compilerOptionspracowało dla mnie w programie Visual Studio 2015 Update 2 z Typescript 1.8.29.0
Vahid Amiri
1
W pewnym momencie w czasie TypeScript 2 program Visual Studio przeszedł z zachowywania tych ustawień w .csprojpliku do korzystania z tsconfig.json. Jeśli strona TypeScript właściwości projektu nie jest wyłączona, prawdopodobnie oznacza to, że masz zainstalowaną starą wersję narzędzi TypeScript dla programu Visual Studio i powinieneś zainstalować microsoft.com/en-us/download/details.aspx?id=48593
cchamberlain
32

Natknąłem się dzisiaj na ten problem: naprawiłem go za pomocą nowej "watch":trueopcji kompilatora, dostępnej również przez JSON w najnowszych wersjach TypeScript:

{
  "compilerOptions": {
    "watch": true
  }
}

Po wykonaniu tej czynności musiałem rozwiązać inny problem związany z następującym błędem, który pojawił się w oknie wyjściowym:

Object doesn't support property or method 'watchFile'

Okazało się, że mój system używa przestarzałej wersji TypeScript (1.0.x), mimo że byłem pewien, że mam nowszą wersję, która została dołączona do Visual Studio 2015 Update 1 (1.7). Jeśli napotkasz ten problem, możesz łatwo sprawdzić wersję tsc, wpisująctsc -v z wiersza polecenia.

Jeśli mówi 1.0.xlub cokolwiek <1.7, prawdopodobnie wynika to z faktu, że w zmiennej środowiskowej PATH znajdują się stare odwołania. Upewnij się, że masz zainstalowaną wersję 1.7 lub nowszą, sprawdzając zawartość folderu Microsoft SDKs, który jest używany przez program Visual Studio do instalowania pakietów TypeScript w miarę ich aktualizacji:

C:\Program Files (x86)\Microsoft SDKs\TypeScript

Jeśli nie, zaktualizuj odpowiednio. Otwórz CPanel > System > Zaawansowane > Zmienne środowiskowe , wybierz Zmienne systemowe i kliknij Edytuj ; przejrzyj listę w poszukiwaniu jakichkolwiek odniesień do folderu TypeScript, zmień jeden z nich, aby wskazywał na najnowszą zainstalowaną wersję TypeScript ( 1.7lub nowszą ) i usuń wszelkie inne duplikaty. Zobacz także zrzut ekranu poniżej:

wprowadź opis obrazu tutaj

Aby uzyskać dodatkowe informacje, przeczytaj ten post na moim blogu.

Darkseal
źródło
1
Dla mnie na win10 nazwa na liście to "Ścieżka", a nie zmienne systemowe. Po wybraniu tego (jego wartość jest długim ciągiem połączonym średnikiem), a następnie kliknięciu edycji, pojawi się okno modalne pokazane w tej odpowiedzi. Moje rozwiązanie nie było dodać compilerOptions> Zegarek> true, ale ustawić compileOnSave> true (jeden krok od compilerOptions)
BobbyTables
1
U mnie ustawienie tej opcji spowodowało błąd kompilacji JsErrorScriptException (0x30001). Po wyszukaniu natknąłem się na ten problem github.com/Microsoft/TypeScript/issues/7362 . Rozwiązanie Miłosza Wierzbickiego (ustawienie „compileOnSave”) działa u mnie, ale dopiero po ponownym uruchomieniu VS.
fikkatra
Miałem ten sam problem. U i @zedd zaoszczędzili mi wiele godzin. Ten post jest również pomocny: ryadel.com/en/… .
Dudi
8

Rozwiązanie:

Dla mnie i jestem całkiem pewien, że dotyczy to również innych, było to spowodowane błędem w pliku tsconfig.json.

Musisz dodać „compileOnSave”: true. Ale w sekcji globalnej nie w compilerOptions.

Wrong:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "compileOnSave": true

  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Correct:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"

  },
"compileOnSave": true,
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Z poważaniem,

Anders Obaj Basechat.

Anders Both
źródło
6

Wydaje się, że ten problem został rozwiązany dzięki najnowszej aktualizacji TypeScript Language Servicesrozszerzenia.

Zapoznaj się z tą odpowiedzią, aby uzyskać instrukcje dotyczące stosowania tej aktualizacji.

Nathan Friend
źródło
2

W moim przypadku zainstalowałem Visual Studio Community 2015 wraz z VS 2012. Używałem Web Essentials do pisania na maszynie w 2012 roku, co wydawało się kolidować z 2015.

Odinstalowanie programu Web Essentials w 2012 r. Rozwiązało problem.

Christopher Thomas
źródło
Używam VS Community i odinstalowanie Web Essentials załatwiło sprawę. Dziękuję i popieram!
Ray
2

Z maszynopisem 2 musisz usunąć "outDir": z twojego tsconfig. Napraw błąd w Visual Studio.

Yvan
źródło
Gdzie jest outir tsconfig? Thx
sójka
@jay Nie widzisz opcji w pliku konfiguracyjnym tsconfig.json w maszynopisie?
Yvan
1

We właściwościach projektu -> „Kompilacja TypeScript” możesz po prostu odznaczyć opcję „Nie emituj danych wyjściowych, jeśli zostaną zgłoszone jakiekolwiek błędy”. Zaznaczenie tego wydaje się dezaktywować transpilowanie przy zapisywaniu, gdzie występuje błąd lub nie.

Dominic Williams
źródło
1

To "compileOnSave": true,nie działało dla mnie. W końcu doszedłem do wniosku, że Visual Studio nie honoruje "compileOnSave": true,wartości, jeśli jest zdefiniowana w innym .jsonpliku, który rozszerzasz. Musi znajdować się w katalogu głównym, aby działał.

Daryl
źródło
1

zlokalizuj plik, tj. C: \ file.ts w swoim terminal/cmdi wpisz

tsc file.ts -w // watches for file changes and converts on save
WasiF
źródło
1

Sprawdź, czy masz zainstalowaną wersję TypeScript, która jest skonfigurowana w projekcie. Jakoś nie otrzymałem ostrzeżenia, że ​​nie mam zainstalowanego TypeScript 3.7, ale funkcja kompilacji przy zapisie przestała działać po cichu.

Po zainstalowaniu TypeScript 3.7 znów działał.

ser
źródło
1

Nie jestem pewien, czy to komuś pomoże.

Myślałem, że mam problemy z kompilacją, ale kompilowanie odbywało się przy zapisywaniu. Po prostu nie przełączono paska narzędzi eksploratora rozwiązań, aby wyświetlić wszystkie pliki.

Plik był tam, czekając niecierpliwie na dodanie do projektu.

wprowadź opis obrazu tutaj

ZombieCode
źródło
0

Dokładnie ten sam problem tutaj. Używam Visual Studio 2015 Update 3 i TypeScript 2.9.2.0. W narzędziach / opcjach / projektach i rozwiązaniach / zewnętrznych narzędziach internetowych podniosłem $ (PATH) do drugiej pozycji. Przy wszystkich tych konfiguracjach compileOnSave: true nie działa dla mnie. Rozwiązaniem obejściowym jest otwarcie wiersza poleceń, uruchomienie ng build --watchz boku i pozwolenie węzłowi na automatyczną kompilację

Yue Yin
źródło
0

Miałem podobny, ale nie ten sam problem w programie Visual Studio 2019

  • Mój projekt został skonfigurowany do korzystania z TypeScript 2.9
  • Miałem zainstalowany TypeScript 3.8, a kod skompilował się, ale nie skompilował się przy zapisywaniu

Zainstalowałem starszą wersję, TypeScript 2.9, zrestartowałem VS, a potem ożył

Tony
źródło