In meinem Projekt TypeScript 2.2.1 in Visual Studio 2015 Update 3 werden in der Fehlerliste Hunderte von Fehlern angezeigt:
Datei 'C:/{{mein-Projekt}}/node_modules/buffer-shims/index.js' kann nicht geschrieben werden, da sonst die Eingabedatei überschrieben wird.
Es sieht immer so aus. Es verhindert zwar nicht wirklich das Bauen und alles funktioniert gut, aber die Fehlerliste ist ablenkend und es ist schwierig, "echte" Fehler zu finden, wenn sie auftreten.
Hier ist meine tsconfig.json
-Datei
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"sourceMap": true,
"target": "ES5",
"forceConsistentCasingInFileNames": true,
"strictNullChecks": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"typeRoots": [],
"types": [] //Explicitly specify an empty array so that the TS2 @types modules are not acquired since we aren't ready for them yet.
},
"exclude": ["node_modules"]
}
Wie kann ich all diese Fehler beseitigen?
Es scheint, dass dieses Problem für mich durch ein Update auf TypeScript 2.3.x behoben wurde
Auch die Verwendung von Visual Studio 2017 war eine große Verbesserung. Ich empfehle dringend, dass Sie beides dieser Updates machen.
Ich habe das gleiche Problem. In meinem Fall war dies das Ergebnis der Option: allowJs: true
.
Also musste ich diese Zeile grundsätzlich entfernen, um die Fehler zu beseitigen. Ich sehe es nicht in Ihrem Code, aber vielleicht hilft es Ihnen hier.
Viel Glück!
In meiner Instanz habe ich die Option outFile verwendet, das Zielverzeichnis jedoch nicht von den Eingaben ausgeschlossen.
// Bad
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5",
"allowUnreachableCode": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"typeRoots": [ "./typings" ],
"outFile": "./built/combined.js"
},
"include": [
"./**/*"
],
"exclude": [
"./plugins/**/*",
"./typings/**/*"
]
}
Alles, was wir tun müssen, ist, die Leckereien im outDir auszuschließen:
// Good
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5",
"allowUnreachableCode": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"typeRoots": [ "./typings" ],
"outFile": "./built/combined.js"
},
"include": [
"./**/*"
],
"exclude": [
"./plugins/**/*",
"./typings/**/*",
"./built/**/*" // This is what fixed it!
]
}
Das Hinzufügen von 'dist' zu den ausgeschlossenen Verzeichnissen in tsconfig.json hat bei mir funktioniert:
{
"exclude": ["node_modules", "dist"]
}
Das Hinzufügen von "outDir": "./dist" zu compilerOptions in tsconfig.json funktionierte für mich, als ich diesen Fehler erhielt. Ich bin mir ziemlich sicher, dass dies nur die CodeScript-Erweiterung von Visual Studio ist, die diesen Fehler ausgibt. Ich verwende den ts-loader mit Webpack und nicht direkt mit dem tsc-Compiler, sodass ich das outDir nicht angeben musste, da die Webpack-Konfiguration dies steuert, aber wenn dies die VS-Code-Erweiterung glücklich macht, ist es gut.
Hierfür gibt es mehrere mögliche Ursachen.
outDir
auf "dist" oder den Namen eines anderen Ordners derselben Ebene. (Das Präfix './' ist nicht erforderlich.) Hier werden die Build-Dateien abgelegt.allowJs
auf false oder löschen Sie die Zeile. Hinweis: aktiviert, allowJs widerspricht der Deklaration setting/flag. Es ist nicht standardmäßig aktiviert.exclude
ein.main
auf "index" oder einen anderen ausgewählten Namen. Stellen Sie weder den Build-Ordner (zB "dist/index") noch das unnötige "./" voran.types
(moderner Alias von typings
) auf "index". Das Hinzufügen der Erweiterungen (.d.ts oder .js) ist nicht erforderlich.Obwohl Sie es auf millionenfache Weise haben können, ist es der Einfachheit halber und zur Verbesserung des Verständnisses am besten, sich zunächst an gängige Praktiken zu halten - wie die Verwendung von "dist", simple tsconfig.json und package.json Dateien auf der gleichen Ebene im Baum und so weiter. Natürlich würde das Durchwühlen der Dateien Ihrer node_modules auch Ihr Verständnis vertiefen, aber es gibt lohnendere Dinge im Leben.
Set outDir.
"outDir": "./",
dieser Hinweis besagt, dass die Ausgabe direkt neben der Eingabedatei platziert wird, wenn Sie outDir nicht festlegen. Nach allowJs wird auch die JavaScript-Datei kompiliert. Die kompilierte JavaScript-Datei überschreibt dann Ihre Quelldatei. Es erinnert dich nur daran.
Ich hatte auch dieses Problem. In meinem Fall habe ich die Originalversion der Datei \tools\JsEngine\typescriptServices.js
wiederhergestellt und sie wurde behoben.
Ich habe festgestellt, dass typescriptServices.js wegen des Zeilenendes (CRLF or CR)
von Visual Studio geändert wurde. Danach kann VS
sie nicht korrekt ausführen.
Ich hatte das gleiche Problem. In meinem Fall lag das daran, dass ich zwei Dateien mit demselben Namen in einem Modul hatte: index.ts index.tsx.
Ich habe einen umbenannt und das Problem wurde behoben.
Ich habe das Problem gelöst, indem Sie "declaration": true
aus meiner Datei tsconfig.json entfernt haben. Obwohl ich jetzt keine Erklärungen mehr habe, hat das nicht geholfen.
Die Ursache des Problems sind wahrscheinlich 2 Dateien, die dasselbe Modul erzeugen. Wenn sich also zwei Dateien im selben Ordner mit demselben Namen aber unterschiedlichen Erweiterungen befinden, führt dies zu diesem Fehler.
z.B:
\index.ts
\index.tsx
Die Lösung ändert einen dieser Dateinamen in etwas anderes.
In meinem Fall wegen der Entwicklung einer Bibliothek und einer App zur gleichen Zeit ...
Das Verschieben einer Datei, die aus der Bibliothek importiert wurde, von der App in die Bibliothek hat zur Folge, dass die Datei, die sich jetzt in der Bibliothek befindet, Daten aus ihrem eigenen dist-Ordner importiert.
Lustige Sache ist .. das ist eigentlich Refactoring von seiner besten Seite .. es behielt den richtigen Verweis auf die Datei :)