【发布时间】:2017-08-15 04:42:14
【问题描述】:
我有一个将 2 个节点项目合二为一的 docker 容器。项目 A 是 statsd project,项目 B 是一个 postgres 后端项目,它使用 npm 包 pg 写入 postgres 数据库。我在 2 个单独的存储库中同时拥有 A 和 B。然后我将它们分别复制到 Docker 映像中,如下所示 Dockerfile:
COPY ./statsd/ /opt/statsd/
COPY ./postgres-backend/ /opt/statsd/postgres-backend/
然后我将 javascript 从 postgres-backend 复制到 docker 内的文件夹 /opt/statsd/backends/。在这个阶段,我可以使用自己的 package.json 规范在/opt/statsd 目录中执行npm install。但是,我的postgres-backend 存储库有自己的 package.json 文件,它指定了它需要的依赖项(在本例中为 pg)。我尝试切换到/opt/statsd/postgres-backend 目录并执行npm install。那只安装在子目录下。当我在/opt/statsd 目录中运行statsd.js 时,它抱怨找不到模块pg。
如何解决这个项目有 2 个 package.json 的问题?
【问题讨论】:
-
npm install pg@x.x 没用???
-
@lopezdp 这行得通,但感觉就像是 hack,因为 postgres-backend 的 package.json 被规避了。如果将来在 postgres-backend 项目中添加另一个依赖项怎么办?我想知道这种情况是否有更好的解决方案。
-
这就是您的解决方案。您必须做的工作是在旧库开始弃用不再支持的旧功能时,调试和更新依赖于旧库的新版本。还要确保在 npm 命令的末尾添加 --save 以确保它保存到您项目的应用程序中!
-
如果该答案能解决您的问题,请告诉我。这不是 hack,而是在包不断扩展、更新、改进和工作的环境中使其工作的方式。有时版本已弃用会破坏您的应用的功能。
-
你在使用 ExpressJS 之类的框架吗?
标签: javascript node.js postgresql npm statsd