gpt4 book ai didi

meteor - 无需互联网访问的 Meteor 应用程序的本地 NPM/Atmosphere 包存储库

转载 作者:行者123 更新时间:2023-12-01 15:02:29 27 4
gpt4 key购买 nike

我目前正在开发 Meteor 应用程序的分支 Rocket Chat 。我需要在隔离网络上支持应用程序进行测试和开发,因此无法访问任何互联网。

我不能只是让它在连接的系统上运行,然后将它批量复制到断开连接的实验室中。相反,我需要能够检查源代码的副本(来自本地 SCM),然后运行 ​​Meteor,让它即时执行所有必要的编译和依赖项解析。

尽管这是一个巨大的困惑,但我希望我可以将 .meteor 文件夹从一个工作系统直接复制到目标系统上,这样它就已经有了所有需要的缓存包,因此不需要访问任何存储库。但是,根据我的发现,这仅适用于从 Atmosphere 下载的 Meteor 依赖项。

在 Rocket Chat 中,有几个私有(private)包(例如 rocketchat-ldap)依赖于 NPM 包(在本例中为 ldapjs)。当应用程序运行并构建这些包时,用户主目录中的 .npm 文件夹将填充这些 NPM 包。因此,我尝试将该文件夹与 .meteor 文件夹一起打包以完成相同的任务。

不幸的是,当我在离线系统上测试它时,尽管有填充的 .npm 文件夹,Meteor 还是吐出以下错误:

While building package rocketchat:ldap: error: Can't install npm dependencies. Are you connected to the internet?

显然,我没有连接 - 设计使然。

所以,我目前正在调查 Sinopia 在我们的本地网络上建立一个 NPM 存储库镜像来托管这些依赖项。但是,我不知道应该如何将 Meteor 指向备用服务器。 Meteor 文档包含有关应用程序使用的 Npm.dependsNpm.requires 指令的信息,但我找不到任何有关指定要从中查找的 URL 的信息说包裹。

此外,是否可以使用 Atmosphere 包做类似的事情?还是复制 .meteor 文件夹是唯一的方法?比如,是否有一些应用程序可以用来托管一些 Meteor 包?还是我以错误的方式解决了这个问题?

最佳答案

我采用的解决方案并不像我希望的那样优雅:

首先,我从“工作”系统的用户帐户复制了 .meteor 文件夹(其中包含 Meteor 可执行文件和所有 MeteorAtmosphere 下载的包)到断开连接的目标系统的用户帐户。这允许目标系统运行 Meteor。

其次,有问题的 NPM 包被直接下载到源中的私有(private)包中,但是源上的 .gitignore 文件被设置为忽略 node_modules 文件夹。所以我改变了它,然后将那些 node_modules 文件夹与应用程序的其余部分一起检查到源中。

因此,例如,应用程序源包含一个 /packages/rocketchat-ldap/.npm/package 文件夹。然后,当应用程序使用 meteor 运行时,相关的 NPM 包(例如 ldapjs)将直接下载到 node_modules 该文件夹结构中的文件夹,此时可以构建私有(private)包。

现在,Git 中的源代码已经包含那些下载的包,因此当副本 check out 到断开连接的目标系统时,无需下载它们。

幸运的是,这并没有增加源代码的大小(只有几百 KB)。

结果是,当运行 meteor 以在目标系统上运行应用程序时,所有依赖项都已经到位,并且不需要互联网连接。

关于meteor - 无需互联网访问的 Meteor 应用程序的本地 NPM/Atmosphere 包存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791178/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com