我有一个共享的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用户进行类型检查?如果没有,有这个问题的其他人在做什么?
答案 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
文件同名时,它会使用前者来遮蔽后者。