Gulp 在 NODE_ENV=production 时构建到 Docker 容器中

Gulp build into Docker container when NODE_ENV=production

我有一个 Docker 容器 托管 NodeJS Web 应用程序。

这个docker容器有环境变量NODE_ENV=production

当我 运行 容器时,npm install 会因此跳过 package.json 文件中的所有 devDependencies

我认为有 3 种不同的解决方案,但 none 看起来不错

  1. build 存储在我的 CVS 上
  2. 外建docker
  3. 将所有 devDependencies 移动到 dependencies

选项 1 在 CVS 上存储,看起来很愚蠢

选项 2 需要安装 NodeJS、npm、gulp 和许多其他库

选项 3 看起来最好

但我对任何其他建议感兴趣

好的,我找到了解决办法!

我的生产节点应用需要环境变量NODE_ENV=production

所以我编辑了 docker 文件并删除了

ENV NODE_ENV production

我已经将 CMD 更新为

CMD ['./start.sh']

这是./start.sh

#!/bin/bash
gulp build
export NODE_ENV=production
nodemon server -p80

另一种解决此类情况的方法是将 NODE_ENV 作为构建参数传递:

docker build --build-arg NODE=development --rm -t some/name  .

对于任何 运行 遇到将 NODE_ENV 作为 build-arg 传递的问题...请尝试将其作为 NODE(如上所述)或其他名称传递。在您的 Dockerfile 中,您可以像这样使用它:

ARG NODE=production
ENV NODE_ENV ${NODE}
RUN npm start

请注意,在上面的代码中,production 是默认设置,但您可以使用 --build-arg NODE=development 覆盖它。