【问题标题】:Dockerize React + Redux app running Node server & Webpack运行 Node 服务器和 Webpack 的 Dockerize React + Redux 应用程序
【发布时间】:2019-01-22 05:02:49
【问题描述】:

以下是我的项目结构。

root
├── public
│   ├── favicon.ico
│   └── index.html
├── server
│   └── index.js
├── src
    └── index.js

这是一个 React + Redux Web 应用程序,带有一个 Node.js Express 服务器来为路由提供服务。 Webpack 将所有内容构建到 /dist 文件夹中。

我创建了以下 Dockerfile,尝试构建和运行,但没有成功。

FROM node:8.11.3

ENV NODE_ENV=production

RUN mkdir -p /app
WORKDIR /app
COPY package.json /app/
RUN npm install

CMD npm run build && npm start

EXPOSE 8080

我将使用什么正确的生产级 Dockerfile 配置?

更新:这是我得到的错误。

# docker run -i -t -p 8080:8080 45e219dfed94

> myapp@1.0.0 build /app
> webpack --mode production

sh: 1: webpack: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! myapp@1.0.0 build: `webpack --mode production`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the myapp@1.0.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-08-15T12_15_41_041Z-debug.log

【问题讨论】:

  • 当你说“它不起作用”时,你能不能说得更具体一些。此外,让您的 React 前端和 express 后端位于 2 个不同的容器中会更有意义。如果需要,您可以使用docker-compose 同时运行两个容器
  • 添加了我得到的错误。我找不到 webpack。
  • 另外图片只包含node_modules和package.json。 node_modules 不包含 webpack。
  • webpack 不会全局安装在该容器映像中。您需要将其作为依赖项并将其设置在您的package.json 的scripts 部分中。这样你就可以在你的容器内做npm run ...。似乎你一次尝试做太多你还没有完全阅读的事情,我会一步一步地学习 webpack 构建是如何工作的,拆分你的前端和后端,然后跟随一些关于如何正确创建镜像的 Docker 教程

标签: node.js reactjs docker webpack


【解决方案1】:

埃里克,

“未找到 webpack”错误表示容器内未安装 webpack。将以下内容添加到您项目的“依赖项”中的 package.json 中:

  "webpack": "^4.0.1",
  "webpack-cli": "^2.0.9"

所以它看起来像这样

"dependencies": {
  ...,
  "webpack": "^4.0.1",
  "webpack-cli": "^2.0.9"
},

【讨论】:

  • 它们是devDependencies 的一部分。那是问题吗?此外,该图像仅包含 node_modules 和 package.json 。我在那里看不到任何其他文件夹和文件。 :(
  • 是的,如果你设置了 NODE_ENV 并且 webpack 只是一个 dev 依赖,npm install 不会安装 webpack,因为它不是一个“dev”环境
  • Webpack 应该在devDependencies,它是一个开发工具,只需要构建你的应用程序,而不是运行它
猜你喜欢
  • 2016-12-18
  • 2016-10-12
  • 2021-12-05
  • 2020-09-20
  • 2015-08-16
  • 2019-12-21
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多