webpack - Generer TypeScript-definisjonsfiler ved å bruke rollup


Jeg prøver Rollup.js for å bygge mitt TypeScript-prosjekt, men jeg vet ikke hvordan jeg skal generere definisjonsfilene og hvordan jeg automatisk kan inkludere dem i dist-filene.

Ville noen vite hvordan man gjør det?

Her er min rollup.config.js

import typescript from "rollup-plugin-typescript";
import handlebars from "rollup-plugin-handlebars";
import babel from 'rollup-plugin-babel';

export default {
  entry: 'src/generator.ts',
  format: 'cjs',
  plugins: [
    typescript(),
    handlebars(),
    babel()
  ],
  dest: 'dist/bundle.js'
};

Jeg bruker standard ts-konfigurasjon, men det er det samme med declaration=true.

rediger :

Prøver også å bruke Webpack :

    module.exports = {
      context: __dirname + '/src',
      entry: {
        index: './generator'
      },
      output: {
        path: __dirname + '/build',
        publicPath: '/',
        filename: 'generator.js'
      },
      resolve: {
        root: __dirname,
        extensions: ['', '.ts', '.js']
      },
      module: {
        loaders: [
          { test: /\.ts$/, loaders: ['ts-loader'], exclude: /node_modules/ },
          { test: /\.hbs/, loaders: ['handlebars-loader'], exclude: /node_modules/ }
        ]
      }
    }

Tsconfig :

    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "declaration": true,
        "outDir": "build"
      },
      "exclude": [
        "node_modules",
        "dist",
        "build"
      ]
    }

Den genererte d.ts ser slik ut :

    import { ExportPageModel } from './models/page-model';
    export declare type ExportType = 'text' | 'html';
    export * from './models/page-model';
    export declare namespace Generator {
        function generateHtml(page: ExportPageModel): string;
        function generateText(page: ExportPageModel): string;
    }

Men i appen min som bruker den pakken, kan den ikke finne Generatoren...

import { ExportPageModel, Generator } from 'emlb-generator';

Generator er udefinert, men autfullføringen fungerer fint, så jeg kan ikke finne hvor problemet er :(

Generator.generateHtml({
 ...
});

Svar #1

For å utføre denne oppgaven skal du legge til instruksjoner i rollup.config.js, tsconfig.json og package.json

Vurderer Rollup-versjon ^0.62.0":

1 - Legg til bibliotek av rollup-plugin-typescript2:

npm i rollup-plugin-typescript2

2 - Importer biblioteket inne i rollup.config.js

import typescript fra 'rollup-plugin-typescript2'

3 - Inkluder TypeScript-pluginen inne i plugin-blokken

Merknader: JS-en nedenfor er bare et eksempel, så jeg fjernet andre instruksjoner kun for å gjøre eksemplet renere...

import typescript from 'rollup-plugin-typescript2'

export default {
  input: 'src/index.tsx',
  output: [
    {
      file: pkg.main,
      format: 'cjs',
      exports: 'named',
      sourcemap: true
    },
    {
      file: pkg.module,
      format: 'es',
      exports: 'named',
      sourcemap: true
    }
  ],
  plugins: [
    typescript({
      rollupCommonJSResolveHack: false,
      clean: true,
    })
  ]
}

4 - Legg til declaration-instruksjonen i compilerOptions i tsconfig.json

Notater: Jeg fjernet annen instruksjon bare for å gjøre eksemplet renere...

Eksempel :

{
  "compilerOptions": {
    "declaration": true,
  },
  "include": ["src"],
  "exclude": ["node_modules", "build", "dist", "example", "rollup.config.js"]
}

5 - inkludere main og module instruksjonene inne i package.json for å informere hvor utdataene vil være.

Og til slutt, inkluder rollup -c-instruksjonen inne i script i package.json, eksempel:

{
  "name": "example",
  "version": "0.1.6",
  "description": "Testing",
  "author": "Example",
  "license": "AGPL-3.0-or-later",
  "main": "dist/index.js",
  "module": "dist/index.es.js",
  "jsnext:main": "dist/index.es.js",
  "scripts": {
    "build": "rollup -c",
    "start": "rollup -c -w"
  },
  "files": [
    "dist"
  ]
}

Relaterte artikler