webpack - Udgiv TypeScript-moduler som separate JavaScript-filer
Jeg skriver en bibliotek og jeg vil gerne tilbyde både en bundle (hvor alle filer er kompileret sammen) og en js-mappe, hvor hver modul udsendes separat med sin .d.ts-fil ved siden af. Mit mål er at tillade:
- Brug af separate filer som TS-moduler fra
src-mappen - Brug af filer som JS-moduler fra
js-mappen, når du ikke vil kompilere TypeScript - Brug af bundtet, når du slet ikke ønsker at kompilere noget
Jeg bruger ts-loader til at kompilere en masse TypeScript-moduler med følgende webpack.config.js:
let path = require('path')
module.exports = {
entry: {
main: './src/index.ts'
},
output: {
path: path.resolve(__dirname, 'js')
},
resolve: {
extensions: ['.ts', '.js']
},
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader'
}
]
}
}
...og den følgende tsconfig.json:
{
"compilerOptions": {
"outDir": "js",
"module": "commonjs",
"target": "es5",
"lib": [
"es2015",
"dom",
"dom.iterable"
],
"declaration": true,
"strictBindCallApply": true,
"downlevelIteration": true
}
}
Med denne opsætning resulterer kørsel af webpack i en bundle og alle .d.ts-filer i en js-mappe, hvilket er midt imellem, hvad jeg ønsker. Jeg har brug for, at hver .ts-fil i afhængighedsgrafen i stedet bliver udstedt ved siden af sin .d.ts-fil som en .js-fil. Grundlæggende har jeg brug for to Webpack-konfigurationer:
- en, der udsender
.jsog.d.ts-filer i en mappestruktur, der spejlersrc - endnu en, der kun udsender en pakke
Før udgivelse kører jeg begge konfigurationer, og jeg får alt, hvad jeg har brug for. Jeg kan dog ikke få ts-loader til at udgive separate .js-filer. Er det muligt?