如何在git中“发布”一个私有的Typescript npm包?

问题描述 投票:2回答:3

我认为这应该是标准问题,但我找不到任何答案......

我有两个打字稿项目 - LibraryA和WebserverB。它们是独立的项目,每个都有自己的git存储库。他们也是私人项目 - 我不希望他们公开上市。

显然,我想在WebserverB中使用LibraryA。我认为正确的方法是通过npm,因为它管理所有其他库。幸运的是,npm支持依赖项中的git URL,所以我可以直接将它指向LibraryA的存储库。

但是,该存储库不包含已编译的Javascript文件,仅包含TypeScript文件。我怎样才能做到这一点?或者在这种情况下,正确的方法是什么?

git typescript npm publishing
3个回答
1
投票

如果您不想从git存储库中的源安装依赖项,以下是其他解决方案:

Solution #1 — Install the dependency from a local folder

一个轻松的解决方案是通过LibraryA安装git clone并构建它。然后,在WebserverB/,你可以做一个npm install ../path/to/local/LibraryA

  • npm install <folder>:

将包作为当前项目中的符号链接安装在目录中。它的依赖项将在链接之前安装。如果<folder>位于项目的根目录内,则其依赖关系可能会升级到顶层node_modules,就像它们对其他类型的依赖项一样。 (Source: NPM documentation

Solution #2 — Install a private npm proxy registry

您可以在服务器上安装私有npm代理注册表,例如Verdaccio。然后,您将能够使用所有已编译的文件发布包。

Solution #3 — Pay NPM and publish a private package

您可以从付费帐户在private repository中发布真正的包(也包含已编译的文件)。

Solution #4 — Publish as a release on your GitHub repository (not tested)

NPM documentation表示另一种选择:

  • npm install <tarball url>

获取tarball URL,然后安装它。为了区分这个和其他选项,参数必须以“http://”或“https://”开头。

然后,发布一个包编组,以构建,压缩并将其作为new release上传到您的私有Github存储库中。之后,应该可以使用个人访问令牌通过URL访问tarball吗?


0
投票

我想你可以在库的install中添加一个package.json脚本来编译它。然后你只需要将maintypes指向输出文件。


0
投票

好的,我会用其他答案和一些额外选项的摘要回答我自己的问题。

经过一番思考,我意识到了这一点。问题是 - 谁和何时运行tsc将LibraryA的Typescript编译为Javascript?基本上只有几个选择:

  1. LibraryA的开发人员运行它并发布编译结果(某处);
  2. LibraryA以源代码形式发布,并在将软件包安装到WebserverB时进行编译;
  3. LibraryA以源代码形式发布,构建WebserverB也编译库。

让我们详细看一下。

1. Publish compiled result

那么问题是 - 存储的结果在哪里存储?它必须是NPM可以访问它的地方。因此,只有几个选择:

  • npm注册表(私有,如果你负担得起的话,公开,如果你没事的话)。缺点:嗯,你必须付钱。
  • 某个服务器上的tarball,您可以在其中获取URL。缺点:您必须让服务器来托管这些。并照顾说服务器。
  • 一个新的GIT存储库。不是tarballed,因为npm无法从git存储库中解压缩。缺点:您现在有一个项目的两个存储库。
  • LibraryA所在的git存储库。实质上,您不仅提交TypeScript源文件,还提交编译结果。缺点:提交编译工件是错误的。并且您将与已编译的结果一起发布您的源。您不需要WebserverB中的那些。
  • 与LibraryA相同的git存储库,但是在一个单独的,断开连接的分支中。缺点:这让人感到困惑。你看到两个主干分支有多少个存储库?

尽管存在缺点,但它们仍然是可用的选择。

2. Compile upon install

这里的主要缺点是,它立即依赖于WebserverB上的打字稿。而不仅仅是开发依赖,而是完整的运行时依赖。这可能没关系,但它变得非常奇怪。您如何计划部署WebserverB?这会编辑吗?我不认为这是要走的路。但这是可能的。有关详细信息,请参阅H.B.'s answer

3. Compile together with WebserverB

好吧,如果你只计划在打字稿项目中使用它,这可能没问题。我不确定安装它。您需要修改tsconfig.json文件以在编译中包含node_modules/LibraryA。那真是怪了。您的IDE会对此感到高兴吗?总而言之,这也不是一个好主意。感觉就像打击/滥用系统一样,很少结束。

最后,我想我会选择“commit compiled JS”方法。因为“错误”不是一个好的论据。由于这是一个私人项目,额外发布的来源也不是问题。事实上,也许他们甚至可以帮助调试。

© www.soinside.com 2019 - 2024. All rights reserved.