Почему я не получаю экспортированный объект при импорте в другой проект Typescript?
Я пытаюсь создать библиотеку компонентов React, написанную с помощью Typescript, которая должна быть импортирована в другой проект Typescript. Если быть точным, я хотел бы импортировать библиотеку диаграмм Analytics в сборник рассказов для демонстрации и тестирования.
Для этого я использую эти зависимости для библиотеки:
- "машинопись": "^ 3.1.6"
- "webpack": "^ 4.15.1"
- "babel-loader": "^ 8.0.4"
- "ts-loader": "^ 5.3.0"
- "@ babel / core": "^ 7.1.5",
- "@ babel / runtime": "^ 7.1.5",
- "@ babel / plugin-offer-object-rest-spread": "^ 7.0.0",
- "@ babel / plugin-syntax-dynamic-import": "^ 7.0.0",
- "@ babel / preset-env": "^ 7.1.5",
- многое другое...
И я эти дополнительные зависимости для сборника рассказов:
- "@ storybook / реагировать": "^4.0.4"
- все остальные упомянутые выше
- многое другое...
Более того, у меня есть эти настройки в tsconfig.json моей библиотеки:
- "модуль": "esnext",
- "moduleResolution": "узел",
- "target": "es5" (это специально)
- и т.п.
Webpack генерирует аккуратный файл d.ts, который (помимо прочего) содержит:
declare module 'mylibrary' {
import { BarChartFactory } from 'mylibrary/factories/barChartFactory';
import { LineChartFactory } from 'mylibrary/factories/lineChartFactory';
import { PieChartFactory } from 'mylibrary/factories/pieChartFactory';
import { AreaChartFactory } from 'mylibrary/factories/areaChartFactory';
import { RadarChartFactory } from 'mylibrary/factories/radarChartFactory';
import { ScatterChartFactory } from 'mylibrary/factories/scatterChartFactory';
import { GaugeChartFactory } from 'mylibrary/factories/gaugeChartFactory';
import { HeatmapChartFactory } from 'mylibrary/factories/heatmapChartFactory';
const Analytics: {
"barChart": typeof BarChartFactory;
"lineChart": typeof LineChartFactory;
"pieChart": typeof PieChartFactory;
"areaChart": typeof AreaChartFactory;
"radarChart": typeof RadarChartFactory;
"scatterChart": typeof ScatterChartFactory;
"gaugeChart": typeof GaugeChartFactory;
"heatmapChart": typeof HeatmapChartFactory;
};
export default Analytics;
}
И последнее, но не менее важное: libraryTarget - это UMD.
Теперь, когда я пытаюсь импортировать библиотеку в сборник рассказов следующим образом:
import * as Analytics from "mylibrary";
а затем сделать
console.log(Analytics)
я получил
Module
Symbol(Symbol.toStringTag): "Module"
__esModule: true
__proto__: Object
в консоли. Это не совсем полезно, потому что я ожидаю, что объект, который я могу потреблять (как определено в d.ts).,
Итак, я, должно быть, делаю и / или неправильно понимаю что-то принципиально неправильное в отношении экспорта и импорта. Я очень ценю, если кто-то может указать верное направление. Дайте мне знать, если понадобится больше деталей.
большое спасибо
Вальтер
РЕДАКТИРОВАТЬ: минимальная настройка проекта
- В папке "аналитика" запустите "yarn install && yarn run dist"
- Перейдите в папку "storybook" и запустите "yarn install && yarn start-storybook"
- Откройте браузер и перейдите на localhost:6006
- Проверьте консоль разработчика
- Посмотрите на сообщение, которое начинается с "Вот, пожалуйста!"
- Я ожидаю, что есть Объект, содержащий все фабрики Analytics, а не Модуль или неопределенный...
1 ответ
Похоже, проблема в том, что вы включили статическое разбиение кода на analytics
поэтому Webpack генерирует два пакета, vendors~Analytics.chunk.js
а также Analytics.js
, Analytics.js
зависит от vendors~Analytics.chunk.js
; для импорта Analytics.js
чтобы вернуть полезное значение, вам придется вручную загрузить vendors~Analytics.chunk.js
первый. Вы можете сделать это, добавив следующее в storybook/stories/1_overview.stories.tsx
до ввоза analytics
:
import "analytics/vendors~Analytics.chunk";
Но я не вижу, что вы надеетесь получить в этом сценарии, включив разделение кода и имея всех пользователей analytics
библиотека делает этот дополнительный импорт. Я бы предложил отключить разделение кода, удалив из analytics/webpack.config.ts
:
splitChunks: {
chunks: "all"
}