Die TypeScript-Funktion "Beim Speichern kompilieren" funktioniert in Visual Studio 2015 nicht

83

Die Funktion "Beim Speichern kompilieren" funktioniert nach dem Upgrade auf Visual Studio 2015 nicht mehr. Wenn ich eine Änderung an einer .tsDatei in meinem Projekt vornehme und speichere, wird in der Statusleiste unten in der IDE angezeigt Output(s) generated successfully, die generierte .jsDatei jedoch nicht nicht ändern.

Folgendes habe ich versucht:

  • Hinzufügen des folgenden <Project>Elements zum Stammelement in my .csproj:

    <PropertyGroup>
        <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    </PropertyGroup>
  • Aktivieren und Deaktivieren der Option "TypeScript-Dateien, die nicht Teil eines Projekts sind, automatisch kompilieren" in Tools -> Options -> TypeScript -> Project:

    Geben Sie hier die Bildbeschreibung ein

  • Überprüfen Sie noch einmal, ob "Beim Speichern kompilieren" in den TypeScript Build-Eigenschaften meines Projekts aktiviert ist:

    Geben Sie hier die Bildbeschreibung ein

Was vermisse ich?

Nebenbei bemerkt funktioniert der TypeScript-Kompilierungsschritt wie erwartet, wenn er durch einen regulären Build ausgelöst wird.

Nathan Freund
quelle
Stellen Sie sicher, dass die JS-Dateien NICHT aktualisiert werden. Ich bin für eine Weile auf ein Problem mit VS2013 gestoßen, bei dem die 'JS-Vorschau' nicht aktualisiert wurde, die JS-Dateien jedoch tatsächlich aktualisiert wurden. Öffnen Sie manuell einen, um festzustellen, ob der Code aktualisiert wurde. Die Ursache hierfür war unbekannt, aber die Lösung bestand darin, VS herunterzufahren und erneut zu öffnen. Ich habe noch nicht versucht, TS-Dateien in VS2015 zu erstellen.
Jason H
1
Sie haben es für RTM gebrochen. Siehe diese Frage stackoverflow.com/questions/31559653/…
Simon_Weaver
1
Ich arbeite, wenn Sie Visual Studio als Administrator ausführen!
Alisabzevari
@alisabzevari Vielen Dank für den Vorschlag, aber das Ausführen als Administrator behebt dieses Problem nicht für mich.
Nathan Friend

Antworten:

137

Für mich war es diese Option in tsconfig.json:

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

Starten Sie Visual Studio neu, damit diese Änderung wirksam wird.

Miłosz Wierzbicki
quelle
Mit angular2 habe ich unter anderem mein Typoskript für rc1 aktualisiert und natürlich ist alles kaputt gegangen, bis ich schließlich herausfand, dass dies mein Problem war. Hatte es nicht gebraucht, bis ich auf 1.8.10 aktualisiert habe.
James
4
Ja, fügen Sie die Option in tsconfig.json hinzu und laden Sie das Projekt neu, wenn das Projekt in einer VS-Lösung gehostet wird. Dann wird ts beim Speichern zu js kompiliert.
ZZZ
1
Hinzufügen "watch": truezu compilerOptionsarbeitete für mich auf Visual Studio 2015 Update 2 mit Typescript 1.8.29.0
Vahid Amiri
1
Irgendwann zur Zeit von TypeScript 2 wechselte Visual Studio von der Beibehaltung dieser Einstellungen in der .csprojDatei zur Verwendung von tsconfig.json. Wenn die TypeScript-Seite Ihres Projekts nicht deaktiviert ist, bedeutet dies wahrscheinlich, dass Sie eine alte Version der TypeScript-Tools für Visual Studio installiert haben und microsoft.com/en-us/download/details.aspx?id=48593
cchamberlain
32

Ich bin heute auf dieses Problem gestoßen: Ich habe das Problem mithilfe der neuen "watch":trueCompiler-Option behoben, die in den neuesten TypeScript-Versionen auch über JSON verfügbar ist:

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

Danach musste ich ein anderes Problem lösen, das mit dem folgenden Fehler im Ausgabefenster zusammenhängt:

Object doesn't support property or method 'watchFile'

Es stellte sich heraus, dass mein System eine veraltete Version von TypeScript (1.0.x) verwendete, obwohl ich sicher war, dass ich eine neuere Version hatte, die mit dem Visual Studio 2015 Update 1 (1.7) geliefert wurde . Wenn Sie auf dieses Problem stoßen, können Sie Ihre tsc-Version einfach überprüfen, indem Sie tsc -van einer Eingabeaufforderung eingeben .

Wenn es heißt 1.0.xoder etwas <1,7, liegt es wahrscheinlich daran, dass Ihre PATH-Umgebungsvariable einige alte Referenzen enthält. Stellen Sie sicher, dass Sie 1.7 oder höher installiert haben, indem Sie in Ihrem Microsoft SDKs-Ordner nachsehen, der von Visual Studio verwendet wird, um die TypeScript-Pakete zu installieren, sobald sie aktualisiert werden:

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

Wenn nicht, aktualisieren Sie entsprechend. Öffnen Sie CPanel > System > Erweitert > Umgebungsvariablen , wählen Sie Systemvariablen aus und klicken Sie auf Bearbeiten . Durchsuchen Sie die Liste nach Verweisen auf den TypeScript-Ordner, ändern Sie einen davon, damit er auf die zuletzt installierte TypeScript-Version ( 1.7oder höher) verweist, und löschen Sie alle anderen Dupes. Siehe auch Screenshot unten:

Geben Sie hier die Bildbeschreibung ein

Für weitere Details lesen Sie diesen Beitrag in meinem Blog.

Darkseal
quelle
1
Für mich auf win10 war der Name in der Liste "Pfad" und nicht Systemvariablen. Wenn Sie dies auswählen (sein Wert ist eine lange, mit Semikolons verkettete Zeichenfolge) und dann auf Bearbeiten klicken, wird das in dieser Antwort angezeigte modale Fenster angezeigt. Meine Lösung bestand NICHT darin, compileroptions> watch> true hinzuzufügen, sondern compileOnSave> true zu setzen (einen Schritt weiter als compileroptions)
BobbyTables
1
Das Setzen dieser Option verursachte für mich einen Buildfehler JsErrorScriptException (0x30001). Nach der Suche bin ich auf dieses Problem gestoßen: github.com/Microsoft/TypeScript/issues/7362 . Die Lösung von Miłosz Wierzbicki (Einstellung "compileOnSave") funktioniert für mich, jedoch erst nach dem Neustart von VS.
Fikkatra
Ich hatte das gleiche Problem. U und @zedd haben mir viele Stunden gespart. Dieser Beitrag ist auch hilfreich: ryadel.com/de/… .
Dudi
7

Lösung:

Für mich, und ich bin mir ziemlich sicher, dass dies auch für andere der Fall ist, war dies auf einen Fehler in der Datei tsconfig.json zurückzuführen.

Sie müssen "compileOnSave" hinzufügen: true. Aber im globalen Bereich nicht in 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"
  ]
}

Freundliche Grüße,

Anders Beide Basechat.

Anders Both
quelle
6

Dieses Problem scheint mit dem letzten Update der TypeScript Language ServicesErweiterung behoben worden zu sein .

In dieser Antwort finden Sie Anweisungen zum Anwenden dieses Updates.

Nathan Freund
quelle
2

In meinem Fall hatte ich Visual Studio Community 2015 zusammen mit VS 2012 installiert. 2012 hatte ich Web Essentials für Typoskript verwendet, was mit 2015 in Konflikt zu geraten schien.

Die Deinstallation von Web Essentials im Jahr 2012 hat das Problem für mich behoben.

Christopher Thomas
quelle
Ich verwende VS Community und die Deinstallation von Web Essentials hat den Trick für mich getan. Danke und positiv bewertet!
Ray
2

Mit Typoskript 2 müssen Sie "outDir": aus Ihrer tsconfig löschen. Beheben Sie den Fehler für mich in Visual Studio.

Yvan
quelle
Wo ist die outir tsconfig? Thx
Jay
@jay Sie sehen die Option in der Konfigurationsdatei tsconfig.json von typescript nicht?
Yvan
1

In den Projekteigenschaften -> "TypeScript Build" können Sie auch einfach das Kontrollkästchen "Keine Ausgaben ausgeben, wenn Fehler gemeldet werden" deaktivieren. Wenn es überprüft wird, scheint das Transpilieren beim Speichern zu deaktivieren, wenn ein Fehler vorliegt oder nicht.

Dominic Williams
quelle
1

Das hat "compileOnSave": true,bei mir nicht funktioniert. Ich habe schließlich herausgefunden, dass Visual Studio den "compileOnSave": true,Wert nicht berücksichtigt , wenn er in einer anderen .jsonDatei definiert ist , die Sie erweitern. Es muss sich in der Wurzel befinden, damit es funktioniert.

Daryl
quelle
1

Suchen Sie die Datei, dh C: \ file.ts, in Ihrer terminal/cmdund geben Sie ein

tsc file.ts -w // watches for file changes and converts on save
WasiF
quelle
0

Genau das gleiche Problem hier. Ich verwende Visual Studio 2015 Update 3 und TypeScript 2.9.2.0. In Tools / Optionen / Projekte und Lösungen / externe Web-Tools habe ich $ (PATH) auf die zweite Position aktualisiert. Bei all diesen Konfigurationen funktioniert compileOnSave: true bei mir nicht. Die Problemumgehungslösung besteht darin, eine Befehlszeile zu öffnen, ng build --watchseitlich auszuführen und den Knoten die automatische Kompilierung übernehmen zu lassen

Yue Yin
quelle
0

Überprüfen Sie, ob Sie die TypeScript-Version installiert haben, die im Projekt konfiguriert ist. Irgendwie erhielt ich keine Warnung, dass TypeScript 3.7 nicht installiert ist, aber die Funktion zum Kompilieren beim Speichern funktioniert nicht mehr.

Nachdem ich TypeScript 3.7 installiert hatte, funktionierte es wieder.

Käse
quelle
0

Ich bin mir nicht sicher, ob dies jemandem helfen wird.

Ich hatte zwar Probleme beim Kompilieren, aber es wurde beim Speichern kompiliert. Ich hatte einfach nicht die Symbolleiste meines Lösungs-Explorers umgeschaltet, um alle Dateien anzuzeigen.

Die Datei war da und wartete nur ungeduldig darauf, dem Projekt hinzugefügt zu werden.

Geben Sie hier die Bildbeschreibung ein

ZombieCode
quelle
0

Ich hatte ein ähnliches, aber nicht dasselbe Problem in Visual Studio 2019

  • Mein Projekt wurde für die Verwendung von TypeScript 2.9 eingerichtet
  • Ich hatte TypeScript 3.8 installiert und der Code wurde zwar kompiliert, aber beim Speichern nicht kompiliert

Ich habe die ältere Version TypeScript 2.9 installiert, VS neu gestartet und sie ist dann zum Leben erweckt worden

Tony
quelle