在 Typescript 库项目中组织 NPM 模块导出的最佳实践?

Rui*_* Ma 2 npm typescript

我正在用 Typescript 编写一个库包,将其发布到npm注册表,以便它可以被其他各种项目使用。

我已按照发布文档进行操作,以确保该--declaration选项正确,tsc以便类型定义也导出到*.d.ts文件中。

我的问题是,现在此类导出分散在各个文件夹中,我的包的消费者正在导入它们,如下所示。

import { FooType } from 'my-test-pacakge/dist/src/foo/types';
import { BarInterface } from 'my-test-package/dist/src/foo/bar';
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以接受,因为它看起来很乱。我应该编写自己的声明文件以更清晰的方式组织它们吗?

类似问题的现有答案建议通过通用 index.ts 文件导出 API。这对我来说听起来很合理,但我只是想知道dist直接从文件夹导入是否被认为是不好的做法?

Eve*_*ert 7

大多数包更喜欢从 1 个导出点导出,以便库的用户不需要了解有关包的目录结构的任何信息。

import { FooType, BarInterface } from 'my-test-package'.
Run Code Online (Sandbox Code Playgroud)

额外的好处是,您可以在不影响最终用户的情况下重组程序包的内部结构,并且它清楚地描述了您打算由程序包的用户使用的项目以及程序包内部的项目。

所以,是的,我同意这是最佳实践。

有些软件包具有额外的命名空间,mysql2我想到的软件包有两个主要导出:

import { FooType, BarInterface } from 'my-test-package'.
Run Code Online (Sandbox Code Playgroud)

dist但请注意,这里没有类似的东西。dist对最终用户没有意义。