脱机发布npm包

时间:2018-05-08 16:09:21

标签: npm azure-artifacts

我在本地运行TFS 2018,这是离线的,无法访问nuget.org。我们的一个难题是在开发团队之间协调开源的npm包。使用TFS 201,我现在可以在包管理中设置npm提要,这可能是一个解决方案。我们的想法是在Feed中获取所有npm包。

到目前为止,我所做的是在面向互联网的盒子上检索这些包(使用 npm install ),然后将它们传输到离线盒(复制整个npm-cache文件夹) 。然后我将迭代所有npm包并运行 npm publish 到我的TFS注册表。

对于大多数套餐,效果很好。有许多包含预发布脚本或同样错误的包。我仍然可以使用--force( npm publish -f )在注册表中获取它们。但是,我不确定这是否真的有效,因为我无法安装其中的一些。我得到一个ENOENT errno -4058。一个例子是 enter image description here repo。

我想知道是否有更好的方法来解决这个问题?可能有这些包的批量上传选项。

2 个答案:

答案 0 :(得分:0)

首先,您可以设置可以访问互联网的构建代理,TFS可以通过Intranet访问。

其次,您可以尝试change default npm-cache directory包含必要的包,然后通过npm-cache安装包。

另一方面,您可以将包包含在源代码管理中。

答案 1 :(得分:0)

在这里回答我自己的问题作为唯一的其他建议答案没有解决将软件包放入TFS软件包提要保持脱机的想法。

将npm tarballs(.tgz)发布到TFS npm包存储库工作顺利。以前,我试图使用我在缓存中的包发布。我找到了一个特定的npm包(npm-package-downloader),它允许我下载必要的npm包及其依赖项。然后我将这些tarball转移到离线tfs框并使用npm publish <package>发布它们。

完整的工作流程是:

  1. (可从互联网访问的框)npm install -global npm-package-downloader
  2. (可从互联网访问的框)npmDownload -d -e -a -o "<path>" -p "pkg1 pkg2 etc"
  3. (可从因特网访问的盒子)来自#2的拉链(即使npmDownload有一个拉链选项,这总是破了)
  4. (可从Internet访问的框)将zip转移到离线框
  5. (离线框)解压缩文件
  6. (离线框)npm set registry <tfs registry>
  7. (离线框)每个.tgz npm publish <pkg.tgz>。注意,我使用powershell为我做这个。