我目前正在研究Meteor应用程序的分支 Rocket Chat 。我要求在隔离网络上站起来进行测试和开发的应用程序,因此无法访问互联网。
我不能让它在已连接的系统上运行,然后将其批量复制到已断开连接的实验室中。相反,我需要能够检查源代码的副本(来自本地SCM),然后运行Meteor,让它在运行中执行所有必要的编译和依赖性解析。
即使它是一个巨大的kludge,我希望我可以直接将 .meteor 文件夹从工作系统复制到目标系统上,这样它就可以拥有所有必需的缓存包,因此无需联系任何存储库。但是,根据我的发现,这仅适用于从Atmosphere下载的Meteor依赖项。
在Rocket Chat中,有几个私有包(例如 rocketchat-ldap )依赖于NPM包(在本例中为 ldapjs )。运行应用程序并构建这些软件包时,用户主目录中的 .npm 文件夹将填充这些NPM软件包。因此,我尝试将该文件夹与 .meteor 文件夹一起打包以完成相同的任务。
不幸的是,当我在离线系统上测试它时,尽管有填充的 .npm 文件夹,Meteor会发出以下错误:
在构建包火箭聊天时:ldap: 错误:无法安装npm依赖项。你有没有上网?
显然,我没有联系 - 按设计。
因此,我目前正在研究 Sinopia ,以便在我们的本地网络上建立可以托管这些依赖关系的NPM存储库镜像。但是,我不知道我应该如何将Meteor指向备用服务器。 Meteor文档包含有关应用程序使用的 Npm.depends 和 Npm.requires 指令的信息,但我找不到有关指定要查找的URL的信息。说包裹。
此外,是否可以使用Atmosphere包进行类似的操作?或者只是复制 .meteor 文件夹?在那里,是否有一些我可以用来托管一些Meteor软件包的应用程序?或者我是以错误的方式解决这个问题?
答案 0 :(得分:0)
我选择的解决方案,并不像我希望的那样优雅如下:
首先,我从“工作”系统的用户帐户复制了.meteor
文件夹(其中包含 Meteor 可执行文件和所有 Meteor 包从 Atmosphere 下载到断开连接的目标系统的用户帐户。这允许目标系统运行Meteor。
其次,有问题的 NPM 包被直接下载到源中的私有包中,但源上的.gitignore
文件被设置为忽略node_modules
文件夹。所以我对其进行了更改,然后使用应用程序的其余部分将这些node_modules
文件夹检入源代码。
因此,例如,应用程序源包含/packages/rocketchat-ldap/.npm/package
文件夹。然后,当使用meteor
运行应用程序时,关联的 NPM 程序包(例如 ldapjs )将直接下载到node_modules
文件夹中该文件夹结构,此时可以构建私有包。
现在,Git中的源代码已经包含了那些下载的软件包,因此当检出副本到断开连接的目标系统时,无需下载它们。
幸运的是,这并没有增加源的大小(只有几百千字节)。
结果是,当运行meteor
以在目标系统上运行应用程序时,所有依赖项都已就位,并且不需要Internet连接。