离线发布 npm 包

Publishing npm packages offline

我正在 运行 内部部署 TFS 2018,它处于离线状态并且无法访问 nuget.org。我们的努力之一是协调开发团队之间的开源 npm 包。使用 TFS 201,我现在可以在包管理中设置一个 npm 提要,这可能是一个解决方案。这个想法是获取提要中的所有 npm 包。

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

对于大多数 包,这很有效。有许多包带有预发布脚本或同样会出错。我仍然可以使用 --force (npm publish -f) 在注册表中获取它们。但是,我不确定这是否真的有效,因为我无法安装其中的一些。我得到一个 ENOENT errno -4058。一个示例是 acorn 存储库。

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

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

其次,您可以尝试change default npm-cache directory that contains necessary packages, then install the packages through npm-cache

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

在这里回答我自己的问题,因为唯一的其他建议答案没有解决将包放入 TFS 包提要的想法 保持离线状态。

将 npm tarball (.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. (Internet 可访问框)来自 #2 的 Zip(即使 npmDownload 有一个 zip 选项,这总是坏掉)
  4. (Internet 可访问框) 将 zip 传输到离线框
  5. (离线框)解压缩文件
  6. (离线框)npm set registry <tfs registry>
  7. (离线框)对于每个 .tgz npm publish <pkg.tgz>。请注意,我使用 powershell 为我执行此操作。