我有一个nodejs项目,它引用了我私有github repo编写和托管的模块。 package.json中的依赖关系如下所示:
"dependencies": {
... other stuff ...
"my_module": "git+https://github.com/me/mymodule.git",
}
没关系,但是我想为应用程序创建一个Docker容器,但我不想在容器中使用git。我知道我可以通过私人npm repos主持,但我很想找到一种方法让构建过程拉动源(包括该模块),然后将其复制到容器中。
我在容器中进行npm安装很好,但它不喜欢git依赖。或者,我不想在构建机器上进行npm安装,因为我希望自由选择我想要的任何容器......我不希望构建机器将Windows二进制文件锁定到mongo模块例如,将它们复制到我的debian容器中。
我考虑过的一个选择是将依赖项放在" my_module"在devDependencies中,然后在Docker容器中执行" npm install --production",然后复制一个模块。这与devDependencies的意图不符。
任何更好/推荐的解决方案?如果有更好的方法(但我在一些只对这个客户有意义的项目中使用它),我愿意不在github中托管该模块。
答案 0 :(得分:3)
这是一个非常简单的解决方案。构建节点应用程序
npm install
等
然后在您的dockerfile中包含COPY
命令,告诉它节点项目安装目录的位置,以及您希望它复制到的位置。
编辑:
要解决@angelok提出的问题,一旦将它复制到docker镜像中,就应该使用npm rebuild,以便它使用相对于Docker镜像的操作系统而不是操作系统的操作系统的正确依赖关系进行构建。最初安装了节点包。请参阅重建文档here。