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

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

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

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

Подробнее

Я перешла на Lerna + пряжа. Один из моих пакетов — 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, так что вы можете клонировать и играть с ними).

Насколько я понимаю (прочитано около 10 минут), babel на самом деле не компилирует ваш tsc, он просто удаляет все это в простой js? Значит, он никак не выдаст вам определения типов? Похоже, вам нужно, чтобы веб-пакет использовал ts-loader или что-то в этом роде, а затем выплевывал ваши js-файлы для включения в babel. (надеюсь, кто-то более знакомый сможет ответить на ваш вопрос с большей уверенностью!)

Cody G 23.03.2019 22:55

Вы правильно поняли. Я не хочу переходить на ts-loader, потому что мне нужен Babel для всего кода пакетов. Я также отредактировал вопрос, чтобы сделать его более понятным.

Stav Alfi 23.03.2019 23:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
28
2
18 394
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Я хочу создать дем из веб-пакета, иначе мне нужно будет скомпилировать все дважды...

Stav Alfi 23.03.2019 23:08

Я понимаю. Я не могу помочь вам в этом конкретном.

edwin 23.03.2019 23:11

Став, давай дальше, я пытаюсь отправить тебе сообщение.

Shanon Jackson 23.03.2019 23:19

@ShanonJackson Я пропинговал тебя.

Stav Alfi 23.03.2019 23:26

Эх, если Babel на самом деле не компилирует ts из соображений скорости, я бы не стал рассматривать эту компиляцию дважды

Cody G 23.03.2019 23:48

Существует также «tsc --emitDeclarationOnly».

Cody G 27.03.2019 12:58

Привет, можно ли сгенерировать только .d.ts.map? Я использую Tsup, который уже порождает .d.ts, но еще не .d.ts.map.

Eric Burel 07.02.2022 17:46
Ответ принят как подходящий

Бег ts-loader до babel-loader поможет.

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


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

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

аааааааааааааааааааа я уже 2 дня над этим голову ломаю. Наконец добавление ts-loader сработало. Спасибо за это.

Ronn Wilder 14.01.2021 16:25

Вместо установки другого загрузчика (ts-loader) вы также можете добавить 'tsc' в конце команды сборки, но вы настроили свой ts.config, чтобы он выдавал только объявление типов, как показано здесь typescriptlang.org/docs/handbook/babel-with-typescript.html

mukuljainx 25.01.2021 14:26

Другие вопросы по теме