需要将 TS 项目拆分为多个存储库/包,并从它们的各种组合中构建微服务。一个微服务需要一些包,另一个需要一些包,还有一些。
部署时,编译代码并执行 JS 文件(自然)。
但是现在事实证明,如果只是简单的从include包中的TS文件中导出一些代码,那么在执行编译好的微服务的时候就会报错,因为 微服务代码尝试从外部库导入某些内容,但找不到包含此类内容的 JS 文件。
而为了这样一个系统的正确运行,我不仅需要对包含的包的 TS 代码进行更改,还需要构建它们,将编译后的代码推送到存储库并发布也包含此编译代码的 npm 包。
什么不方便,看起来很奇怪,也很容易忘记。
有没有办法以仅发布(并保持最新)TS代码的方式组织存储库/ npm包,并且在编译微服务时,TS代码从导入中提取,并且JavaScript将在一个地方生成一次部署?
当然有,你可以在包里放任何东西,甚至是你的狗儿时的照片,甚至是可执行文件。问题是为什么?
npm
包是一些已构建的即用型代码,不需要额外的步骤即可使用。只需导入/连接它就可以了。如果你只在使用时放入包ts
,你肯定要编译ts
它,但如果你在项目中不使用它怎么办ts
?为了一个数据包,它会产生开销。您如何准确地测试您在包本身中编写的代码?为什么构建
ts > js
看起来很奇怪?有ts
一个参数watch
可以在文件更改时立即重新编译文件+它还构建类型。因此,在编写代码时,您将立即拥有一个现成js
的dist
。软件包不必发布,它们可以通过
file:path/to/local/module
. 然后你所要做的就是重新安装包添加编译
ts
到package.json
然后,在需要连接包的地方,使用本地路径
你的包会被认为是什么,
ts
你可以使用类型 assembly + 字段types
package.json
您
package.json
必须指定然后在安装包并从中导入时,将使用打字稿代码。同时,您根本不需要将编译后的代码保留在存储库中(但是,您应该确保项目之间的 typescript 版本相同)。
要运行打字稿代码,您可以使用
tsnode
(如果我们谈论的是后端)。在webpack的情况下,只有webpack项目本身会被编译成js,并且会以ts的形式拖拽所有的依赖,重新编译自己。显然有很多方法。我自己想出了以下一个。收紧 github 操作以在推送到 master 时自动构建并上传到 npm。有必要对其进行改进,以便所有这些仅在版本发生更改时才会发生,但您已经想睡觉了(无论如何它都会工作,因为如果版本没有更改,那么发布者将出现错误,只是管道将旋转很长时间)。
这是该操作的 yaml 文件的第一个版本: