Как создать файлы 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, а не в веб-пакете.