在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步骤始终运行。