Как создать файлы d.ts и d.ts.map с помощью веб-пакета?

Я не могу найти способ создания файлов d.ts и d.ts.map с помощью веб-пакета. babel-loader генерирует только файлы js и js.map. Мне также нужны файлы d.ts и d.ts.map (которые я смог сгенерировать с tsc команды 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 (без webpack), все работает отлично, как я показал на картинке выше.

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


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

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

Ответ 1

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

Указание, что вы хотите файлы объявлений в конфигурации - это все, что вам нужно.


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

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

Ответ 2

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

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

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

Ответ 3

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

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