Webpackを使用してd.tsおよびd.ts.mapファイルを生成する方法が見つかりません。 babel-loaderはjsおよびjs.mapファイルのみを生成します。次の図に示すように、d.tsファイルとd.ts.mapファイル(tsc
コマンドを使用して生成できました)も必要です。
以下は、すべての設定を含む最小限のリポジトリです: https://github.com/stavalfi/lerna-yarn-workspaces-example
Lerna +糸に移動しました。私のパッケージの1つは、TSおよびJSで書かれたcore
(他のパッケージで使用されます)です。
私はts-to-jsにwebpack 4、babel-loader 8を使用しています。
他のパッケージは、core
パッケージのタイプ定義と実装を見つけようとしていますが、webpackでindex.js
とindex.js.map
を生成することしかできませんでした。
output: {
path: distPath,
filename: 'index.js',
},
{
"extends": "../tsconfig.settings.json",
"compilerOptions": {
"declaration": true,
"declarationMap": true,
"declarationDir": "dist",
"rootDir": "src",
"outDir": "dist"
}
}
tsc
(webpackなし)でコンパイルすると、上の図で示したようにすべてがうまく機能します。私の戦略は間違っていますか?私は何をすべきか?
D.tsファイルを生成するプラグインをたくさん試しましたが、機能せず、d.ts.map
ファイルを作成しません。
私はすでに試しました:TypeScript-declaration-webpack-plugin
、npm-dts-webpack-plugin
、dts-bundle-webpack
、@ahrakio/witty-webpack-declaration-files
。 (これらはcore
のpackage.jsonにリストされているので、複製して遊ぶことができます)。
ランニング ts-loader
前 babel-loader
トリックを行います。
Configで宣言ファイルが必要であることを指定するだけで十分です。
絶対パスを使用している場合、出力d.tsファイルには、役に立たない絶対パスも含まれ、TypeScriptコンパイルエラーが発生します。
それを修正するために、絶対パスを相対パスに変換するプラグインを作成しました: https://github.com/stavalfi/babel-plugin-module-resolver-loader
TypeScriptコンパイラtsc
を直接呼び出して、それを行うことができます。
使用する tsc --declaration
を出力するには.d.ts
ファイルとtsc --declarationMap
は、対応するマップファイルを生成します。
あなたはここでより多くのドキュメントを見つけることができます: https://www.typescriptlang.org/docs/handbook/compiler-options.html
問題は、あなたが "allowJS"を持っているのではないかということです。拡張するtsconfigでtrueです。allowJSと宣言trueが同時にオンになっていると、宣言はビルドされません。
また、タイピングに固有のローダーは必要ありません。tsconfigで宣言をtrueにして、標準のTypeScriptローダーを使用すると、Webpackではなく、tsconfigに指定された出力ディレクトリにタイピングが構築されます。