【问题标题】:npm install with 2 projects in one docker imagenpm install 在一个 docker 映像中包含 2 个项目
【发布时间】: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


【解决方案1】:

问题是您的应用依赖于特定版本的 pg 包。我会找到您需要的版本并运行:

npm install pg@x.x --save

其中 x.x 是您的应用运行所依赖的版本, --save 以确保您的依赖项在您的 package.json 文件中更新。

您只需要告诉您的应用您的应用所依赖的版本。 (基本上)...

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多