一部のルートプロジェクトで使用されるカスタムnpm
ライブラリを作成しました。このライブラリはTypeScriptで記述されています。すべてのソースは/src
フォルダの下にあります。
ライブラリのtsconfig.json
には、次のコンパイラオプションが含まれています。
"sourceMap": true
"outDir": "dist"
package.json
ファイルには以下が含まれます:
"main": "dist/src/index.js",
"typings": "dist/src",
"files": [
"src",
"dist"
],
最後に、生成されたパッケージには、生成された.js
ファイル、d.ts
ファイル、および.ts
ソースファイルが含まれます。
- package.json
- /dist (`.js` and `d.ts` files)
- /src (`.ts` files)
このカスタムライブラリがインストールされているルートプロジェクトで、ライブラリからインポートされた関数を呼び出す行にブレークポイントを追加し、その中にステップインしてコードをデバッグすることができます。すべてTypeScriptで行います。これは素晴らしい!
But、Visual Studio Codeで、ライブラリからインポートされた関数をCTRL-クリックすると、デバッグせずに、をd.ts
タイプに導きます定義ファイル。を.ts
ソースファイルに導いたほうがいいです。現在の方法では、実際のソースコードを表示する必要がある場合は、/src
の下にあるライブラリの/node_modules
フォルダを自分で参照する必要があります。
タイプ定義ファイルの代わりに、VSCodeで直接TypeScriptソースファイルに移動する方法はありますか?
TypeScript 2.9以降では、declarationMap
フラグを使用してライブラリをコンパイルすることが可能です
./node_modules/TypeScript/bin/tsc -p . --declarationMap
これにより、宣言マップファイル(dist/ActionApi.d.ts.map
)および対応するd.tsファイルの下部にあるマップへのリンク
//# sourceMappingURL=ActionApi.d.ts.map
VSCodesは、このような宣言マップに遭遇すると、どこに行くべきかを認識し、ソースコードに直接導きます。
セットアップ disableAutomaticTypeAcquisition: true
in config。
デバッグすると、実際にはソースマップを持つ実際のjsに落ちます。つまり、TypeScriptソースに落ち込んでいるような気分になります。
しかし、TypeScriptとVSCodeはライブラリのソースについて何も知りません。 TypeScriptは、インポートされたライブラリを検索するときに、package.jsonを検索し、「typings」フィールドを検索し、そこで指定されたファイルを使用します。
ライブラリがTypeScriptにd.tsと.jsを提供するが、ソース自体を提供しない理由はあります。ライブラリがソースを提供する場合は、それらをコンパイルする必要があります。それは奇妙で効率的ではありません:
そのため、出荷されたすべてのライブラリは、.d.ts宣言を使用してjsにコンパイルされています。
(ちなみに、何のために)ライブラリソースを本当に見たい場合は、ライブラリソースをsrcディレクトリにコピーして、依存関係から削除します。