Как создать файлы d.ts и d.ts.map с помощью веб-пакета? - PullRequest
13 голосов
/ 24 марта 2019

Я не могу найти способ создания файлов d.ts и d.ts.map с помощью веб-пакета. babel-loader генерирует только файлы js и js.map. Мне также нужны файлы d.ts и d.ts.map (которые я смог сгенерировать с помощью команды tsc), как показано на следующем рисунке:

enter image description here

Вот минимальный репо, который содержит все настройки: https://github.com/stavalfi/lerna-yarn-workspaces-example

Подробнее

Я переехал в Лерну + пряжа. Один из моих пакетов - core (будет использоваться в других пакетах), который написан на TS и JS.

Я использую webpack 4, babel-loader 8 для ts-to-js.

Другие пакеты пытаются найти определения типов и реализацию моего пакета core, но мне удалось сгенерировать 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 (без веб-пакета), все работает отлично, как я показал на картинке выше.

Моя стратегия неверна? что мне делать?


Я перепробовал множество плагинов, которые генерируют файлы d.ts, но они не работают и не создают d.ts.map файлов.

Я уже пробовал: typescript-declaration-webpack-plugin, npm-dts-webpack-plugin, dts-bundle-webpack, @ahrakio/witty-webpack-declaration-files. (Они перечислены в package.json core, так что вы можете клонировать и поиграть с ним).

Ответы [ 3 ]

4 голосов
/ 24 марта 2019

Вы можете вызвать компилятор Typescript tsc напрямую, чтобы сделать это.

Используйте tsc --declaration для вывода файла .d.ts и tsc --declarationMap для создания соответствующего файла карты.

Дополнительную документацию вы можете найти здесь: https://www.typescriptlang.org/docs/handbook/compiler-options.html

0 голосов
/ 18 мая 2019

Запуск ts-loader до того, как babel-loader сделает свое дело.

Все, что вам нужно - указать файлы декларации в конфигурации.


Если вы используете абсолютпуть, выходные файлы d.ts также будут содержать абсолютные пути, которые бесполезны и приведут к ошибкам компиляции машинописи.

Чтобы исправить это, я написал плагин для преобразования абсолютного пути в относительный путь: https://github.com/stavalfi/babel-plugin-module-resolver-loader

0 голосов
/ 24 марта 2019

Проблема в том, что я подозреваю, что у вас есть "allowJS": true в расширяемом файле tsconfig, когда allowJS и объявление true включены одновременно, объявления не построены.

Вам также не нужен специальный загрузчик для типирования, просто объявив true в вашем tsconfig и используя стандартный загрузчик машинописного текста, вы получите типизацию для выходного каталога, указанного в вашем tsconfig, а не в веб-пакете.

...