Generera TypeScript-definitionsfil för paket med webpack
Jag använder för närvarande "gulp" för att generera definitionsfilen för mitt paket på detta sätt:
dtsGenerator.default({
name: 'ngFramework',
project: './',
out: './Typings/raw/index.d.ts'
});
Men jag migrerar till webpack och jag skulle vilja hitta ett sätt att göra samma sak. Jag provade flaggan "declaration" i "tsconfig" men den skapar bara definitionsfilen för varje enskild "ts"-fil, vilket inte är vad jag vill (jag vill ha definitionsfilen för bundlet).
Jag försökte med "dtsbundler-webpack-plugin" men jag kunde inte få det att fungera som förväntat. Utan flaggan "declaration" i "tsconfig" är den genererade filen "0 bytes" och med den har jag många fel.
Svar #1
Du bör använda dts-bundle med WebPack för att generera bundlen. Du bör låta deklarationsflaggan vara sann och prova följande:
Allmän
var path = require('path');
var rootDir = path.resolve(__dirname);
Skriv enkelt plugin
function DtsBundlePlugin() {}
DtsBundlePlugin.prototype.apply = function (compiler) {
compiler.plugin('done', function () {
var dts = require('dts-bundle');
dts.bundle({
name: 'your-lib-name',
main: rootDir + '/build/types/**/*.d.ts',
out: rootDir + '/build/index.d.ts',
removeSource: true,
outputAsModuleFolder: true
});
});
};
Mer information kan hittas i detta blogginlägg av Vladimir Tolstikov.
Registrera
plugins: [
new DtsBundlePlugin()
]
Jag har lyckats paketera typbestämningarna men jag hade några problem med den paketerade koden som är relaterade till min källkod.
Svar #2
Jag skrev ett plugin för webpack som hanterar problemet. Installera först mitt paket.
npm i -D @ahrakio/witty-webpack-declaration-files
Se sedan till att din tsconfig har egenskapen declaration inställd på true.
{ ...
declaration: true,
...
}
Slutligen, i din webpack-konfiguration, importera paketet och konfigurera det under plugins-arrayen.
const DeclarationFilesPlugin = require("@ahrakio/witty-webpack-declaration-files");
...
module.exports = {
...
plugins: [
...
new DeclarationFilesPlugin({
// options goes here
})
]
}
Alternativen är -
merge: boolean (standard: false) - Vill du slå ihop deklarationsfilerna till en fil.
include: string[] (standard: []) - Namnen på de filer som du vill ska inkluderas i den slutliga paketet (Utan filändelser, för MyClass.ts bör du nämna "MyClass").
exclude: string[] (standard: []) - Namnen på filerna som du vill exkludera från den slutliga paketet.
flatten: boolean (standard: false) - Om du vill placera alla deklarationsfiler i rotmappen för din dist-mapp.
Självklart, om du lämnar merge som false kommer pluginet bara att generera filer i include-arrayen, eller alla filer som inte finns i exclude-arrayen, enligt din konfiguration - men kommer inte att slå ihop dem till en fil.
Hoppas det var tillräckligt tydligt. Låt mig veta om du behöver mer hjälp.
Uriah.
