用于无需访问 Internet 的 Meteor 应用程序的本地 NPM/Atmosphere 包存储库

2024-01-06

我目前正在开发 Meteor 应用程序的一个分支火箭聊天 https://github.com/RocketChat/Rocket.Chat。我需要在隔离网络上运行应用程序进行测试和开发,因此无法访问互联网。

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

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

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

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

在构建 Rocketchat:ldap 包时: 错误:无法安装 npm 依赖项。您已连接到互联网吗?

显然,我并没有连接——有意为之。

所以,我目前正在研究Sinopia https://github.com/rlidwka/sinopia在我们的本地网络上建立一个可以托管这些依赖项的 NPM 存储库镜像。但是,我不知道如何将 Meteor 指向备用服务器。 Meteor 文档包含有关Npm.依赖 and Npm.requires指令,应用程序使用这些指令,但我找不到任何有关指定从中查找所述包的 URL 的信息。

此外,是否可以对 Atmosphere 包执行类似的操作?或者正在复制.meteor文件夹唯一的方法吗?例如,是否有一些应用程序可以用来托管一些 Meteor 软件包?或者我以错误的方式处理这件事?


我采用的解决方案并不像我希望的那么优雅,如下:

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

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

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

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

幸运的是,这并没有增加源文件的大小太多(仅几百千字节)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于无需访问 Internet 的 Meteor 应用程序的本地 NPM/Atmosphere 包存储库 的相关文章

随机推荐