Flowtype:打包和非打字用户的包?

时间:2016-04-06 13:43:38

标签: javascript node.js babeljs flowtype

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

我花了几天时间使用流类型重写了包,这样就加了一些代码并且还帮助检测了一些问题。它运行良好,类型检查,测试通过。 Babel删除了所有的流位,因此需要包的客户端仍然可以获得js中的普通文件并且工作正常。

但是现在我想允许这个包的客户端(可选)获取函数的类型签名并检查他们的调用是否正确输入。我可以编写一个声明文件,但它似乎很愚蠢,因为这些类型已经在原始的pre-babel源代码中。与此同时,我不能只提供该来源,因为有些客户可能没有使用流量或babel。我宁愿没有人希望类型必须知道确切的源文件路径,并且必须require('my-package/src/the-piece-i-want')

是否有一种标准的方法来编写带有流的包,以便require('my-package') 只为普通节点用户工作以及对babel + flow用户进行类型检查?如果没有,有这个问题的其他人在做什么?

1 个答案:

答案 0 :(得分:1)

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

发布程序包时,只需将原始源(未编译)的副本留在文件的编译版本旁边,扩展名为.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.flow文件的名称与相邻的.js文件同名时,它会使用前者来遮蔽后者。