在docker-compose构build过程中运行webpack构build

我正在尝试用js文件的缩小版本来构build一个生产docker容器。

在我的Dockerfile ,在安装npm包之后,我正在尝试构buildwebpack编译。

 RUN npm install -gn # upgrading the npm version RUN n stable ADD ./webpack/package.json /package.json RUN npm install --production RUN npm run build-production # <<< Fails here 

在上一个命令RUN npm run build-production与npm抱怨,它无法find已安装的软件包( NODE_PATH设置) RUN npm run build-production NODE_PATH过程将失败。

然而,当我添加调用npm run build-production到我的ENTRYPOINT脚本,它工作正常,编译一切如预期。 但是,它运行webpack构build一切我开始容器,这是不希望的。

为什么最后一个docker build步骤找不到前面步骤中安装的软件包? 但为什么它通过入口点脚本工作?

什么是最好的方式来添加到我的Docker文件的dockerbuild设的webpack生成?

请用

 RUN bash -l -c 'npm run build-production' 

而不是你的

 RUN npm run build-production # <<< Fails here 

这应该有所帮助

问题可能是build-production需要一个devDependencies ,它不会被安装。

保持你的产品图像小的一个好方法是使用像dobi这样的工具。 它使得在开发容器中运行构build任务变得容易,然后将所有内容都打包到生产映像中,所有这些都只需一个命令。

下面是一个例子dobi.yaml可能会为你工作。

 meta: project: some-project-name image=builder: image: myproject-dev context: dockerfiles/ dockerfile: Dockerfile.build image=production: image: user/prod-image-name context: . depends: [build] mount=source: bind: . path: /code run=build: use: builder mounts: [source] command: "npm run build-production" artifact: path/to/minified/assets 

运行dobi production将运行任何陈旧的任务。 如果没有任何源文件发生更改,则跳过任务。 depends: [build]确保构build步骤始终运行。