Visual Studio 2015 Update 3のTypeScript 2.2.1プロジェクトでは、次のようなエラーリストに何百ものエラーが表示されます。
ファイル 'C:/ {{my-project}}/node_modules/buffer-shims/index.jsを書き込むことができません。入力ファイルが上書きされるためです。
いつもこんな感じです。実際にはビルドが妨げられるわけではなく、すべて正常に機能しますが、エラーリストは注意をそらし、「実際の」エラーが発生したときに見つけるのが困難です。
これが私の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"]
}
これらのエラーをすべて取り除くにはどうすればよいですか?
TypeScript 2.3.xにアップデートすることで、この問題は修正されたようです
また、Visual Studio 2017の使用も大きな改善でした。ただし、これらの更新をbothにすることを強くお勧めします。
同じ問題が発生しました。私の場合、それはオプションの結果でした:allowJs: true
。
したがって、基本的にその行を削除してエラーを取り除く必要がありました。あなたのコードには表示されませんが、おそらくここで役立ちます。
幸運を!
私の場合、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!
]
}
Tsconfig.jsonで除外されたディレクトリに「dist」を追加するとうまくいきました:
{
"exclude": ["node_modules", "dist"]
}
OutDirを設定します。
"outDir": "./",
このヒントは、outDirを設定しない場合、出力は入力ファイルのすぐ隣に配置されることです。 allowJsの後、JavaScriptファイルもコンパイルされます。次に、コンパイルされたJavaScriptファイルがソースファイルを上書きします。これを思い出させるだけです。
このエラーが発生したとき、tsconfig.jsonのcompilerOptionsに「outDir」:「./dist」を追加するとうまくいきました。これは、このエラーを出力するVisual Studio Code TypeScript拡張機能に過ぎないと確信しています。私は、tscコンパイラではなくts-loaderをWebpackで直接使用するので、outpackを指定する必要はありませんでした。webpackの設定がそれを制御するからです。
これにはいくつかの原因が考えられます。
outDir
を「dist」または別の同じレベルのフォルダーの名前に設定します。 (「./」の接頭辞は不要です)。これがビルドファイルの格納場所です。allowJs
をfalseに設定するか、行を削除します。注:有効、allowJsは宣言設定/フラグと競合します。デフォルトでは有効になっていません。exclude
に「dist」(またはビルドフォルダー)を含めます。main
を「index」または他の選択した名前に設定します。ビルドフォルダー(例: "dist/index")や不要な "./"のプレフィックスを付けないでください。types
(typings
の現代エイリアス)を「インデックス」に設定します。拡張子(.d.tsまたは.js)を追加する必要はありません。数百万通りの方法がありますが、単純さと理解を深めるために、最初は一般的な慣行に従うことをお勧めします-「dist」、simpletsconfig.jsonおよびpackage.jsonファイルはツリー内の同じレベルにある、など。もちろん、node_modulesのファイルをルート化することで理解を深めることもできますが、人生にはもっとやりがいのあることがあります。
私もこの問題を抱えていました。私の場合、ファイル\tools\JsEngine\typescriptServices.js
の元のバージョンを復元して解決しました。
TypescriptServices.jsは(CRLF or CR)
行の終わりのためにVisual Studioによって変更され、その後VS
は正しい方法で実行できないことがわかりました。
同じ問題がありました。私の場合、1つのモジュールに同じ名前の2つのファイル、index.ts index.tsxがあったため、これが原因でした。
そのうちの1つを名前を変更すると、問題が修正されました。
これを解決するには、tsconfig.jsonファイルから"declaration": true
を削除しました。今はもう宣言がないので、助けにはなりませんでした。
おそらく問題の根本は、同じモジュールを生成する2つのファイルにあります。したがって、同じフォルダに同じ名前で拡張子が異なる2つのファイルがある場合、このエラーが発生します。
例えば:
\index.ts
\index.tsx
解決策は、これらのファイル名の1つを別の名前に変更することです。
私の場合、ライブラリとアプリを同時に開発しているため...
ライブラリからインポートされたファイルをアプリからライブラリに移動すると、ライブラリ内にあるファイルが独自のdistフォルダーからインポートされます。
おかしいのは..これは実際には最高の状態でリファクタリングしています..ファイルへの正しい参照を保持している:)