webentwicklung-frage-antwort-db.com.de

Typoskriptfehler "Datei kann nicht geschrieben werden ... weil Eingabedatei überschrieben werden würde."

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.

 visual studio error list

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?

19
Chris Barr

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.

1
Chris Barr

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!

18
Donniewiko

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!
    ]
}
14
Vince Horst

Das Hinzufügen von 'dist' zu den ausgeschlossenen Verzeichnissen in tsconfig.json hat bei mir funktioniert:

{
  "exclude": ["node_modules", "dist"]
}
5
Mapad

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.

2
Eric Pitcher

Hierfür gibt es mehrere mögliche Ursachen.

  • In Ihrer tsconfig.json:
    • Setzen Sie outDir auf "dist" oder den Namen eines anderen Ordners derselben Ebene. (Das Präfix './' ist nicht erforderlich.) Hier werden die Build-Dateien abgelegt.
    • Setzen Sie allowJs auf false oder löschen Sie die Zeile. Hinweis: aktiviert, allowJs widerspricht der Deklaration setting/flag. Es ist nicht standardmäßig aktiviert.
    • Fügen Sie "dist" (oder Ihren Erstellungsordner) in exclude ein.
  • In Ihrem package.json:
    • Setzen Sie main auf "index" oder einen anderen ausgewählten Namen. Stellen Sie weder den Build-Ordner (zB "dist/index") noch das unnötige "./" voran.
    • Setzen Sie 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.

1
Jai Preston

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.

1
ChenCong Shi

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.

0
Nguyen Duc Tien

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.

0
user2486016

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.

0
AskYous

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.

0
mkb

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 :)

0
TacB0sS