我目前正在开发 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(使用前将#替换为@)