运行 在 docker-compose 构建过程中构建 webpack
Run webpack build during docker-compose build process
我正在尝试使用缩小版的 js 文件构建生产 docker 容器。
在我的 Dockerfile
中,安装 npm 包后,我正在尝试构建 webpack 编译。
RUN npm install -g n # upgrading the npm version
RUN n stable
ADD ./webpack/package.json /package.json
RUN npm install --production
RUN npm run build-production # <<< Fails here
docker 构建过程将在最后一个命令 RUN npm run build-production
期间失败,npm 会抱怨找不到已安装的包(NODE_PATH
已设置)。
但是,当我将调用 npm run build-production
添加到我的 ENTRYPOINT
脚本时,它工作正常并按预期编译所有内容。但是,它运行 webpack 构建我启动容器的所有内容,这是不希望的。
为什么最后的 docker 构建步骤找不到前面步骤中安装的包?但为什么它通过入口点脚本工作?
将 webpack 构建添加到我的 Dockerfile 中的 docker 构建的最佳方法是什么?
请使用
RUN bash -l -c 'npm run build-production'
而不是你的
RUN npm run build-production # <<< Fails here
这应该有帮助
问题可能是 build-production
需要一个 devDependencies
,但尚未安装。
保持生产图像较小的一个好方法是使用像 dobi 这样的工具。它使得在开发容器中 运行 构建任务变得容易,然后将所有内容打包到生产映像中,所有这些都只需一个命令。
下面是一个可能适合您的示例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
将 运行 任何过时的任务。如果 none 个源文件已更改,则跳过任务。 depends: [build]
确保构建步骤总是 运行 首先。
我正在尝试使用缩小版的 js 文件构建生产 docker 容器。
在我的 Dockerfile
中,安装 npm 包后,我正在尝试构建 webpack 编译。
RUN npm install -g n # upgrading the npm version
RUN n stable
ADD ./webpack/package.json /package.json
RUN npm install --production
RUN npm run build-production # <<< Fails here
docker 构建过程将在最后一个命令 RUN npm run build-production
期间失败,npm 会抱怨找不到已安装的包(NODE_PATH
已设置)。
但是,当我将调用 npm run build-production
添加到我的 ENTRYPOINT
脚本时,它工作正常并按预期编译所有内容。但是,它运行 webpack 构建我启动容器的所有内容,这是不希望的。
为什么最后的 docker 构建步骤找不到前面步骤中安装的包?但为什么它通过入口点脚本工作?
将 webpack 构建添加到我的 Dockerfile 中的 docker 构建的最佳方法是什么?
请使用
RUN bash -l -c 'npm run build-production'
而不是你的
RUN npm run build-production # <<< Fails here
这应该有帮助
问题可能是 build-production
需要一个 devDependencies
,但尚未安装。
保持生产图像较小的一个好方法是使用像 dobi 这样的工具。它使得在开发容器中 运行 构建任务变得容易,然后将所有内容打包到生产映像中,所有这些都只需一个命令。
下面是一个可能适合您的示例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
将 运行 任何过时的任务。如果 none 个源文件已更改,则跳过任务。 depends: [build]
确保构建步骤总是 运行 首先。