web-dev-qa-db-ja.com

タイプスクリプトエラー「入力ファイルを上書きするため、ファイルを書き込めません...」

Visual Studio 2015 Update 3のTypeScript 2.2.1プロジェクトでは、次のようなエラーリストに何百ものエラーが表示されます。

ファイル 'C:/ {{my-project}}/node_modules/buffer-shims/index.jsを書き込むことができません。入力ファイルが上書きされるためです。

いつもこんな感じです。実際にはビルドが妨げられるわけではなく、すべて正常に機能しますが、エラーリストは注意をそらし、「実際の」エラーが発生したときに見つけるのが困難です。

visual studio error list

これが私のtsconfig.jsonファイル

{
  "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"]
}

これらのエラーをすべて取り除くにはどうすればよいですか?

27
CBarr

TypeScript 2.3.xにアップデートすることで、この問題は修正されたようです

また、Visual Studio 2017の使用も大きな改善でした。ただし、これらの更新をbothにすることを強くお勧めします。

1
CBarr

同じ問題が発生しました。私の場合、それはオプションの結果でした:allowJs: true

したがって、基本的にその行を削除してエラーを取り除く必要がありました。あなたのコードには表示されませんが、おそらくここで役立ちます。

幸運を!

25
Donniewiko

私の場合、outFileオプションを使用していましたが、入力から宛先ディレクトリを除外していませんでした。

// 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/**/*"
    ]
}

私たちがしなければならないのは、outDirのグッズを除外することだけです:

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

Tsconfig.jsonで除外されたディレクトリに「dist」を追加するとうまくいきました:

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

OutDirを設定します。

"outDir": "./",

このヒントは、outDirを設定しない場合、出力は入力ファイルのすぐ隣に配置されることです。 allowJsの後、JavaScriptファイルもコンパイルされます。次に、コンパイルされたJavaScriptファイルがソースファイルを上書きします。これを思い出させるだけです。

5
Cheney Shi

このエラーが発生したとき、tsconfig.jsonのcompilerOptionsに「outDir」:「./dist」を追加するとうまくいきました。これは、このエラーを出力するVisual Studio Code TypeScript拡張機能に過ぎないと確信しています。私は、tscコンパイラではなくts-loaderをWebpackで直接使用するので、outpackを指定する必要はありませんでした。webpackの設定がそれを制御するからです。

3
Eric Pitcher

これにはいくつかの原因が考えられます。

  • Tsconfig.json ::
    • outDirを「dist」または別の同じレベルのフォルダーの名前に設定します。 (「./」の接頭辞は不要です)。これがビルドファイルの格納場所です。
    • allowJsfalseに設定するか、行を削除します。注:有効、allowJsは宣言設定/フラグと競合します。デフォルトでは有効になっていません。
    • excludeに「dist」(またはビルドフォルダー)を含めます。
  • Package.json:
    • mainを「index」または他の選択した名前に設定します。ビルドフォルダー(例: "dist/index")や不要な "./"のプレフィックスを付けないでください。
    • typestypingsの現代エイリアス)を「インデックス」に設定します。拡張子(.d.tsまたは.js)を追加する必要はありません。

数百万通りの方法がありますが、単純さと理解を深めるために、最初は一般的な慣行に従うことをお勧めします-「dist」、simpletsconfig.jsonおよびpackage.jsonファイルはツリー内の同じレベルにある、など。もちろん、node_modulesのファイルをルート化することで理解を深めることもできますが、人生にはもっとやりがいのあることがあります。

1
Jai Preston

私もこの問題を抱えていました。私の場合、ファイル\tools\JsEngine\typescriptServices.jsの元のバージョンを復元して解決しました。

TypescriptServices.jsは(CRLF or CR)行の終わりのためにVisual Studioによって変更され、その後VSは正しい方法で実行できないことがわかりました。

0
Nguyen Duc Tien

同じ問題がありました。私の場合、1つのモジュールに同じ名前の2つのファイル、index.ts index.tsxがあったため、これが原因でした。

そのうちの1つを名前を変更すると、問題が修正されました。

0
user2486016

これを解決するには、tsconfig.jsonファイルから"declaration": trueを削除しました。今はもう宣言がないので、助けにはなりませんでした。

0
AskYous

おそらく問題の根本は、同じモジュールを生成する2つのファイルにあります。したがって、同じフォルダに同じ名前で拡張子が異なる2つのファイルがある場合、このエラーが発生します。

例えば:

\index.ts
\index.tsx

解決策は、これらのファイル名の1つを別の名前に変更することです。

0
mkb

私の場合、ライブラリとアプリを同時に開発しているため...

ライブラリからインポートされたファイルをアプリからライブラリに移動すると、ライブラリ内にあるファイルが独自のdistフォルダーからインポートされます。

おかしいのは..これは実際には最高の状態でリファクタリングしています..ファイルへの正しい参照を保持している:)

0
TacB0sS