我认为这应该是标准问题,但我找不到任何答案......
我有两个打字稿项目 - LibraryA和WebserverB。它们是独立的项目,每个都有自己的git存储库。他们也是私人项目 - 我不希望他们公开上市。
显然,我想在WebserverB中使用LibraryA。我认为正确的方法是通过npm,因为它管理所有其他库。幸运的是,npm支持依赖项中的git URL,所以我可以直接将它指向LibraryA的存储库。
但是,该存储库不包含已编译的Javascript文件,仅包含TypeScript文件。我怎样才能做到这一点?或者在这种情况下,正确的方法是什么?
如果您不想从git存储库中的源安装依赖项,以下是其他解决方案:
一个轻松的解决方案是通过LibraryA
安装git clone
并构建它。然后,在WebserverB/
,你可以做一个npm install ../path/to/local/LibraryA
:
- npm install <folder>:
将包作为当前项目中的符号链接安装在目录中。它的依赖项将在链接之前安装。如果<folder>位于项目的根目录内,则其依赖关系可能会升级到顶层node_modules,就像它们对其他类型的依赖项一样。 (Source: NPM documentation)
您可以在服务器上安装私有npm代理注册表,例如Verdaccio。然后,您将能够使用所有已编译的文件发布包。
您可以从付费帐户在private repository中发布真正的包(也包含已编译的文件)。
NPM documentation表示另一种选择:
- npm install <tarball url>
获取tarball URL,然后安装它。为了区分这个和其他选项,参数必须以“http://”或“https://”开头。
然后,发布一个包编组,以构建,压缩并将其作为new release上传到您的私有Github存储库中。之后,应该可以使用个人访问令牌通过URL访问tarball吗?
好的,我会用其他答案和一些额外选项的摘要回答我自己的问题。
经过一番思考,我意识到了这一点。问题是 - 谁和何时运行tsc
将LibraryA的Typescript编译为Javascript?基本上只有几个选择:
让我们详细看一下。
那么问题是 - 存储的结果在哪里存储?它必须是NPM可以访问它的地方。因此,只有几个选择:
尽管存在缺点,但它们仍然是可用的选择。
这里的主要缺点是,它立即依赖于WebserverB上的打字稿。而不仅仅是开发依赖,而是完整的运行时依赖。这可能没关系,但它变得非常奇怪。您如何计划部署WebserverB?这会编辑吗?我不认为这是要走的路。但这是可能的。有关详细信息,请参阅H.B.
's answer。
好吧,如果你只计划在打字稿项目中使用它,这可能没问题。我不确定安装它。您需要修改tsconfig.json
文件以在编译中包含node_modules/LibraryA
。那真是怪了。您的IDE会对此感到高兴吗?总而言之,这也不是一个好主意。感觉就像打击/滥用系统一样,很少结束。
最后,我想我会选择“commit compiled JS”方法。因为“错误”不是一个好的论据。由于这是一个私人项目,额外发布的来源也不是问题。事实上,也许他们甚至可以帮助调试。