首页 > 解决方案 > 如何在 Dockerfile 中描述正在运行的 npm 脚本

问题描述

我在 Dockerfile 中描述了执行 npm 脚本的命令:

WORKDIR /usr/src/app/server
CMD ["npm", "run", "build"]

它只是一个构建我的项目的 webpack 脚本

"scripts": {
  "build": "webpack --mode development --open",
  "watch": "webpack --mode development --open --watch",
  "prod": "webpack --mode production"
},

在构建期间,我可以看到该命令已执行:

Step 23/28 : WORKDIR /usr/src/app/server
 ---> Running in e85934faf65a
Removing intermediate container e85934faf65a
 ---> 9f14cb58deca
Step 24/28 : CMD [ "npm", "run", "build" ]
 ---> Running in 6d3157d2e962
Removing intermediate container 6d3157d2e962
 ---> 9237c0a03fe9
Step 25/28 : WORKDIR /usr/src/app
 ---> Running in 3888c83ed88f

我希望得到生成的dist文件夹。但我可以看到该文件夹​​未在容器内生成

root@82a01ee6d1fe:/usr/src/app/server# ls
package-lock.json  package.json  src  tsconfig.json  webpack.config.js

如何正确执行 Docker 文件中的 npm 脚本?
我做错了什么?

标签: dockernpmwebpack

解决方案


我使用下一个命令解决了这个问题

RUN nmp run build

那真的执行得不像CMD ["npm", "run", "build"]

我在使用 webpack 时遇到了一个问题。它在 node_modules 中不起作用,我在全球范围内安装了它:

RUN npm install -g webpack webpack-cli

在容器中,我找到了由 webpack 生成的dist文件夹和文件bundle.js :

root@49f66ba44ab9:/usr/src/app/server# ls
dist  node_modules  package-lock.json  package.json  src  tsconfig.json  webpack.config.js
root@49f66ba44ab9:/usr/src/app/server# ls ./dist
bundle.js

推荐阅读