Javascript 使用子模块typescript写入模块到非typescript模块的工作流?

Javascript 使用子模块typescript写入模块到非typescript模块的工作流?,javascript,typescript,npm,Javascript,Typescript,Npm,我有一个私有的typescript模块,它是另一个主要项目的依赖项。通过将typescript存储库作为子模块,并使用npm将其安装到本地子文件夹,可以实现此依赖关系。typescript模块可以在其dist文件夹上编译成JavaScript,通过这样做,使用它的主模块可以毫无问题地使用它。但我的问题是,dist文件夹没有提交到typescript存储库 为了从一个只使用JavaScript的主要项目中使用这个typescript模块,应该遵循什么工作流?此时此刻,我能想到的最好方法是在使用主要

我有一个私有的typescript模块,它是另一个主要项目的依赖项。通过将typescript存储库作为子模块,并使用npm将其安装到本地子文件夹,可以实现此依赖关系。typescript模块可以在其dist文件夹上编译成JavaScript,通过这样做,使用它的主模块可以毫无问题地使用它。但我的问题是,dist文件夹没有提交到typescript存储库


为了从一个只使用JavaScript的主要项目中使用这个typescript模块,应该遵循什么工作流?此时此刻,我能想到的最好方法是在使用主要项目之前,指示某人或某事运行$tsc命令,但这很烦人,因为这不是一个透明的步骤。如果这是一种奇怪的方法,那么什么是更理想的方法?谢谢大家。

您有两个选择

假设您不打算使用专用npm注册表,例如,您只需提交dist文件夹即可。这绝对是最简单的选择,并不是完全没有听说过,我可能会选择这个选项。 这个解决方案实际上很不寻常,但它非常聪明,而且很有效。您可以在TypeScript包的package.json中添加一个postinstall脚本,该脚本将在安装包后运行tsc。缺点是您必须添加typescript作为依赖项,这并不理想,它通常应该是一个dev依赖项,在这种情况下,它不会安装在使用包的项目中,但对于一些人来说,这可能根本不是什么大问题

您可以使用主项目中的脚本来编译包,而不是安装包。不过,每次包中发生更改时,您都必须运行它。您还可以将其附加到您的npm开始脚本中,以便它在它之前运行,例如,假设您当前的开始脚本是start:webpack,则开始:npm compile package&&webpack。但它的伸缩性不是很好

如果你的Javascript项目使用Babel,我假设,考虑到你说这是一个主要项目,你可以更改它的配置,以便它使用@Babel/plugin transform Typescript为你传输Typescript,但是它可能有点复杂,IIRC,例如,默认情况下,使用create react app创建的项目不会从节点模块重新编译代码


可能有更多的解决方案,但我可能会选择1或2。

您说过您正在使用npm安装模块。Git存储库应该只包含Typescript代码,但是您发布到npm注册表的代码应该是Javascript,所以模块的编译版本是Javascript。这不是你现在正在做的吗?它是参照本地文件夹安装的。这是$npm安装.././无论什么。没有一个项目是真正发布的,它们都是私有模块。这有意义吗?这是一个绝对奇妙的答案,它将帮助我决定正确的解决方案。非常感谢。