Flowtype:打包有types和无types的用户?

我有一个共享npm包与几个js应用程序消耗的一些业务逻辑。 在src中有es6 +stream源文件,然后在lib中创build了vanilla js文件,而包的main被设置为lib / index.js,它导出应该可见的东西。

我花了几天时间使用streamtypes重写了这个包,这些代码整理了一些代码,还帮助检测了一些问题。 它很好,types检查,testing通过。 Babel删除所有的stream动位,因此需要包的客户端仍然可以获取js中的纯文件,并且工作正常。

但是现在我想允许这个包的客户端(可选)获取函数的types签名,并检查他们的调用是否正确input。 我可以写一个声明文件,但看起来很愚蠢,因为这些types已经在原始的pre-babel源代码中。 同时,我不能仅仅提供这个来源,因为有些客户可能不会使用stream量或者巴贝尔。 我宁愿没有人希望types必须知道确切的源文件path,并且必须require('my-package/src/the-piece-i-want')

有没有一种标准的方式来编写一个包的stream程,使得require('my-package')既适用于纯节点用户也适用于babel + flow用户的types检查? 如果不是,那么这个问题的其他人又在做什么呢?

有! 看看这个博客文章: http : //flowtype.org/blog/2015/12/01/Version-0.19.0.html#declaration-files

当你发布你的软件包的时候,只需要在扩展名为.js.flow的文件的编译版本旁边保留一个原始源代码(未编译)的.js.flow

所以像这样:

 /package.json /src/index.js <-- compiled version /src/index.js.flow <-- original version /src/lib/myLib.js <-- compiled /src/lib/myLib.js.flow <-- original 

当Flow看到与相邻的.js文件具有相同名称的.js.flow文件时,它将使用前者来映射后者。