Javascript 具有多个子模块的typescript项目
我有一个项目,目标非常简单,将其公开为包含类型化定义的库 事实上,这个项目在没有它的情况下可以编译并运行良好,typescript编译器也可以导出所有定义 为了理解我的问题,让我介绍一下这个项目的一小部分,让事情变得更简单 项目结构 通常,类别中的所有Javascript 具有多个子模块的typescript项目,javascript,typescript,webpack,ecmascript-6,Javascript,Typescript,Webpack,Ecmascript 6,我有一个项目,目标非常简单,将其公开为包含类型化定义的库 事实上,这个项目在没有它的情况下可以编译并运行良好,typescript编译器也可以导出所有定义 为了理解我的问题,让我介绍一下这个项目的一小部分,让事情变得更简单 项目结构 通常,类别中的所有package.json文件如下所示: { "name": "category-or-component-name", "version": "0", "main": "CategoryOrComponent.ts", "types
package.json
文件如下所示:
{
"name": "category-or-component-name",
"version": "0",
"main": "CategoryOrComponent.ts",
"types": "CategoryOrComponent.ts"
}
export { default as Button } from './Button'
export { default as Toast } from './Toast'
import Button from './Elements/Button'
类别
在src
中,有一些组件的“类别”,每个类别承载一个package.json
、一个{CategoryName}.ts
文件和一个组件列表
类别实现,如下所示:
{
"name": "category-or-component-name",
"version": "0",
"main": "CategoryOrComponent.ts",
"types": "CategoryOrComponent.ts"
}
export { default as Button } from './Button'
export { default as Toast } from './Toast'
import Button from './Elements/Button'
组件
这里没有太多秘密,每个组件在component.tsx
上都有正确的实现,每个组件文件夹中的package.json
文件几乎与在类别中创建的package.json
文件相同
以下是组件的示例:
import * as React from 'react'
export interface Props {
children?: string | JSX.Element;
}
export default class Button extends React.PureComponent<Props, {}> {
public render (): JSX.Element {
const { children } = this.props
return (
<button>{children}</button>
)
}
}
定义
类别和组件中的定义永远不会加载,因为.d.ts
文件并不指向.d.ts
文件,而是指向文件夹
让我们看一个定义示例:
export interface Props {
children?: string | JSX.Element;
}
export default class Button extends React.Component<Props, {}> {
static defaultProps: Partial<Props>;
private handleOnClick;
private handleOnMouseOver;
private handleOnMouseOut;
private handleOnTouchStart;
private handleOnTouchEnd;
render(): JSX.Element;
}
这意味着该库的使用者将永远找不到Button.d.ts
文件,因为其中没有package.json
Atsrc
工作,因为每个文件夹都有一个package.json
文件。这里的package.json
文件的职责是向节点和typescript指出谁是索引文件,就像这样简单
所以我的问题是,tsc
中有一些功能可以捆绑,或者可以提高模块分辨率
谢谢