@build-script/export-all-in-one

write your library with typescript. make all exports available from single entry.

Usage no npm install needed!

<script type="module">
  import buildScriptExportAllInOne from 'https://cdn.skypack.dev/@build-script/export-all-in-one';
</script>

README

English

export-all-in-one

在你的 TypeScript 项目中“收集”所有export语句,把它们从一个入口文件中重新导出,于是其他人可以import { 任何, 东西 } from '@你的/包'。而不需要了解任何东西在哪个文件里。你可以在不同版本间瞎几把改文件路径,没有人会察觉。

使用方法:

一、安装

npm -g install build-script

二、修改你的 tsconfig

由于种种限制,outDir 是必须的。不支持原地编译。

三、使用魔法

tsconfig.json 可以省略,这两个命令的先后顺序无所谓

export-all-in-one ./path/to/tsconfig.json
tsc -p ./path/to/tsconfig.json

💥BOOM,所有东西都导出了。

提示:

  1. 你还需要在package.json中设置入口文件
    这个工具会在你的outDir文件夹里创建_export_all_in_one_index.js,你需要把package.json中的main指向它。
  2. 同时还要改package.json中的 types 或 typings 字段,值为./docs/package-public.d.ts
  3. 当探测到“双包模式”时,这个工具同时还会创建_export_all_in_one_index.cjs,你需要修改package.json中的exports

链接:

选项与配置:

如果一个导出的符号有注释文档(/** */):

  • 带有@extern标签的会被导出
  • 带有@internal标签的会被隐藏(.d.ts 和_export_all_in_one_index 里都不会有它)
  • 没用注释,或没有上面两种标签:使用默认设置(exportEverything)

没有export的符号无论加什么都不会被导出。

package.json中的配置:

{
    "exportAllInOne": {
        "exportEverything": true
    }
}
配置 类型 默认值 描述
exportEverything boolean true 符号如果不加注释,默认应该被导出还是隐藏

这个包会做:

  1. 通过你的tsconfig.json和 typescript api 解析你项目涉及到的文件(所以不被 tsc 处理的文件也不会被这个包处理)
  2. 收集各个文件中导出的符号信息
  3. 在临时文件夹里生成一个_export_all_in_one_index.ts
  4. 调用和 typescript 编译_export_all_in_one_index.ts然后把结果复制到outDir
  5. 调用@microsoft/api-extractor分析_export_all_in_one_index.ts然后把结果复制到你的包/docs/

限制:

  1. 显然,你的多个文件不可以导出同一个名称,但你本来也不该这么做,除非你想让用户的 IDE 懵逼

  2. 默认导出会被变成命名导出,名称就是文件名(不建议用默认导出)