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

无需互联网访问的Meteor应用程序的本地NPM/Atmosphere软件包存储库,meteor,npm,atmosphere,Meteor,Npm,Atmosphere,我目前正在开发Meteor应用程序的分支。我有一个要求,在一个孤立的网络上测试和开发应用程序,所以没有任何互联网接入 我不能只是让它在一个连接的系统上运行,然后将它大量复制到断开连接的实验室。相反,我需要能够检查源代码的副本(从本地SCM),然后运行Meteor,让它动态执行所有必要的编译和依赖项解析 尽管这是一个巨大的难题,我还是希望我可以将.meteor文件夹从一个工作系统直接复制到目标系统上,这样它就已经有了所有必需包的缓存,因此不需要访问任何存储库。然而,据我所知,这只适用于从大气下载的

我目前正在开发Meteor应用程序的分支。我有一个要求,在一个孤立的网络上测试和开发应用程序,所以没有任何互联网接入

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

尽管这是一个巨大的难题,我还是希望我可以将.meteor文件夹从一个工作系统直接复制到目标系统上,这样它就已经有了所有必需包的缓存,因此不需要访问任何存储库。然而,据我所知,这只适用于从大气下载的流星依赖项

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

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

在构建软件包rocketchat:ldap时: 错误:无法安装npm依赖项。你连接到互联网了吗

很明显,我不是故意的

因此,我目前正在研究如何在本地网络上建立一个NPM存储库镜像,以承载这些依赖项。然而,我不知道如何将Meteor指向备用服务器。Meteor文档包括有关Npm.dependensNpm.requires指令的信息,应用程序使用这些指令,但我找不到任何关于指定URL以查找所述包的信息


此外,是否可以对大气包执行类似操作?还是复制.meteor文件夹是唯一的方法?在中,是否有一些应用程序可以用来托管一些Meteor软件包?还是我做得不对?

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

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

其次,正在讨论的NPM包被直接下载到源中的私有包中,但是源上的
.gitignore
文件被设置为忽略
节点模块
文件夹。所以我改变了这一点,然后将那些
node\u模块
文件夹与应用程序的其余部分一起检查到源代码中

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

现在,Git中的源代码已经包含了这些下载的包,所以当副本签出到断开连接的目标系统时,就不需要下载它们了

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


结果是,当运行
meteor
在目标系统上运行应用程序时,所有依赖项都已就绪,不需要internet连接。

那么
meteor build
呢?这是你的选择吗?因为无论如何,您都无法在离线机器上进行任何认真的开发,所以部署包之外的任何东西可能都没有意义。我相信让包离线运行会更容易(很简单?),这可能是唯一的方法,但我希望不是。让人沮丧的是,运行应用程序需要访问internet。我想我看不出运行由
build
创建的捆绑包有什么问题。直接运行meteor是为了开发,我不明白你为什么想在没有互联网的机器上开发。只是一些实验室活动必须发生并停留在那里的独特(政府)要求。我想你总是可以“欺骗”npm并将/etc/hosts文件中的npmjs.com覆盖到您选择的本地服务器上,在那里您已经复制了所需的包(但并不是说后一部分会很容易)。