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:

  1. Brug af separate filer som TS-moduler fra src-mappen
  2. Brug af filer som JS-moduler fra js-mappen, når du ikke vil kompilere TypeScript
  3. 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 .js og .d.ts-filer i en mappestruktur, der spejler src
  • 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?

Relaterede artikler