outFile caution
以下の理由から、これを使用するのは良くない考えです:
ランタイムエラー
高速コンパイル
グローバルスコープ
分析しづらさ
スケールしづらさ
_references
コードの再利用性
複数のターゲット
分離されたコンパイル
ランタイムエラー
あなたのコードがjsの任意の形式に依存する場合は、実行時にランダムなエラーが発生します。
クラスの継承は実行時に破損する可能性があります。
foo.ts
を考えてみましょう:
と bar.ts
:
あなたが正しい順序でコンパイルに失敗した場合など。おそらくアルファベット順にtsc bar.ts foo.ts
コードがコンパイルされますが、実行時にReferenceError
でエラーが発生します。
モジュールの分割は実行時に失敗することがあります。
foo.ts
を考えてみましょう:
そしてbar.ts
:
あなたが正しい順序でコンパイルに失敗した場合など。おそらくアルファベット順に tsc bar.ts foo.ts
コードがコンパイルされますが、実行時にはbar
がNaN
に設定されています。
高速コンパイル
--out
を使用すると、単一の.ts
ファイルは、不要なハックなしに単独で単一の.js
ファイルにコード化することはできません。--out
は本質的に遅いインクリメンタルビルドを強制します。
また、ソースマップは位置的にセンシティブでランレングス符号化されているので、元のマップを使用する場合は再コンパイル時に大部分のマップを再構築する必要があります。10秒から100秒のクロックが必要になるので、それは遅くなるでしょう。
グローバルスコープ
確かに名前空間を使うことはできますが、ブラウザで実行するとwindow
にはまだその名前空間を使うことができます。名前空間は不要な回避策に過ぎません。また、/// <reference
コメントは、あなたのコードにグローバルコンテキストを導入して、保守性を損ねます。
また、あなたの会社が独立して働いているいくつかのチームを持っていて、誰かが独立に書かれた2つのアプリケーションを統合しようと決心した場合、名前が競合する可能性が高いです。
分析しづらさ
私達は、より多くのコード解析ツールを提供したいと考えています。依存関係のチェーン(暗黙的に外部モジュールを使用している銀の大皿があります)を提供すると、これらは簡単になります。
また、_devツール_だけでなく、コードを理解するのに苦労します。次の人間は、物が実際にどこからインポートされるのかを理解し始める前に、多くのコードベースを理解する必要があります。内部モジュールを使用すると、コードを分離してレビューすることも難しくなります。例えば、githubで。
スケールしづらさ
ランダムなランタイムエラー、遅くなるコンパイル時間、他の人のコードを理解するのが難しくなることによる、ただの結果です。
_references.ts
_references.ts
tsconfig.json
ではサポートされていません: https://github.com/Microsoft/TypeScript/issues/2472#issuecomment-85330803 あなたは手動でfiles
の配列をソートする必要があります。
コードの再利用
あなたのコードの一部を別のプロジェクトで再利用したい場合、そのすべての_暗黙の_依存関係管理を、潜在的なランタイムエラーなしに移植することは難しくなります。
複数のターゲット
また、nodejs(例:testing API)のようなものでブラウザコードを再利用することに決めた場合は、モジュールシステムに移植するか、nodejsのglobal
を、あなたの新しいグローバルスコープにするために醜いハックを考える必要がありますスコープ(例:window
)。
分離されたコンパイル
ファイルを単独でコンパイルすることはできません。例えば「a.ts」を考えてみましょう:
次の形式のb.ts
があるかどうかによって出力が異なります:
または
そのためa.ts
は 分離コンパイルできません
まとめ
--out
はビルドツールの仕事です。また、このようなビルドツールを使っても、外部モジュールによって提供される依存関係の恩恵を受けることができます。そのため、外部モジュールを使用し、必要に応じてビルドツールで単一の.js
ファイルを作成することをお勧めします。
https://twitter.com/nycdotnet/status/613705850574778368
最終更新