我正在尝试创建一个通过 Typescript 编写的 React 组件库,该组件库应导入另一个 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-proposal-object-rest-spread": "^7.0.0",
- "@babel/plugin-syntax-dynamic-import": "^7.0.0",
- "@babel/preset-env": "^7.1.5",
- 还有很多...
我为故事书提供了这些额外的依赖项:
- “@storybook/react”:“^4.0.4”
- 上面提到的所有其他人
- 还有很多...
此外,我在库的 tsconfig.json 中有以下设置:
- “模块”:“esnext”,
- "moduleResolution": "节点",
- “目标”:“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
- 检查开发控制台
- 留意以“你去!”开头的消息。
- 我希望有一个包含所有分析工厂的对象,而不是一个模块或未定义的......