2017-06-30 34 views
1

我试图实现与码头工人开发人员的工作流程,以发展下线的能力(如,不必运行npm install当您对具有不同的依赖性分支机构之间进行切换)发展的NodeJS离线搬运工

的最直观的方法是将依赖关系存储在源代码管理中。这有它自己的问题,尤其是在使用编译依赖关系的模块时。我已经试过几乎所有我能想到的,发现:

  • npm pack荷兰国际集团我的项目的依赖,在源存储但这并不存储我的依赖的依赖
  • 存储源node_modules,复制此到容器运行npm rebuilddoesn't actually trigger a rebuild
  • 运行npm install --no-registry因此T触发重建,但不尝试调用出来,但它实际上调用了公众注册表反正
  • 其他解决方案我见过像Node-PAC似乎抛弃
  • npmbox看起来最有前途,但它要求将其安装在全局目标上,除非我们开始在生产环境中部署容器,否则它将在可构建但不能生产的容器中工作。

这是徒劳的努力吗?缺少网络访问非常罕见,只有在安装新模块或在具有不同依赖关系的修订之间移动时才需要。

+0

虽然我不涉及需求(我使用Canonical的Juju Local容器实现为本地开发容器运行),这里有一个想法:自node_modules是一个临时的gitignored文件夹,为什么不创建任何分支的所有依赖关系的集合,并将它们存储在项目的package.json文件的devDependencies中。这样,所有node_modules都可用于任何正在切换到的分支。 *警告:如果您在分支机构中拥有并行版本的NPM模块,这将不起作用* – SylonZero

+0

这是我将来预见的问题的一部分:在这种假设情况下,可能的情况是依赖项的版本会在关闭修订版。 – BrDaHa

回答

1

另一种方法是设置专用npm存储库并将其配置为缓存公共存储库。有几个选项来实现这一点,我会建议尝试Nexus:https://www.sonatype.com/nexus-repository-oss

+0

是的,我已经有了这个,但是提出的方案是“如果我在飞机上,想要在分支之间切换?”),尽管我真的开始觉得它是这样一个角落的情况下,它不值得追求 – BrDaHa

+0

我很抱歉没有足够的精确度,但我建议你在你的笔记本电脑上设置一个私人回购。:)这样你就可以在任何地方都得到所有需要的回扣 – vsenko

+0

经过一番思考,我认为你是对的,这可能是以不需要在源代码中存储二进制blob或显着调整npm的方式实现它的唯一方法。我确实发现了这个名为local-npm的模块,它似乎可以完成这项工作,并且启动速度比sonatype快 – BrDaHa