【发布时间】:2022-12-01 01:07:24
【问题描述】:
我有一个正在尝试 Dockerize 的 React 应用程序。这是我的 Dockerfile 和 docker-compose:
FROM node:16.13.1
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json .
COPY package-lock.json .
RUN mkdir -p node_modules/node-sass/vendor/linux-x64-93
RUN curl -L https://github.com/sass/node-sass/releases/download/v7.0.1/linux-x64-93_binding.node -o node_modules/node-sass/vendor/linux-x64-93/binding.node
RUN npm install -g npm@9.1.2
RUN npm install react-scripts@5.0.0 -g
RUN npm rebuild node-sass
COPY . .
EXPOSE 3000
CMD \["npm", "start"\]
version: "3.8"
services:
web-cnss:
build: './editor'
ports: [ "3000:3000" ]
container_name: WEB-CNSS
volumes:
- '/app/node_modules'
我需要以某种方式指定 npm 版本并安装 react-scripts,否则它会在另一台计算机上出错。 除此之外,在我的电脑上一切正常,但是,我的目标是任何人都可以克隆我的项目并通过简单地运行“docker-compose up”来构建它。
我在同事的电脑上测试了一下,是这样的错误:
Error: Cannot find module 'react'
WEB-CNSS | Require stack:
WEB-CNSS | - /usr/local/lib/node_modules/react-scripts/scripts/start.js
WEB-CNSS | at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
WEB-CNSS | at Function.resolve (node:internal/modules/cjs/helpers:108:19)
WEB-CNSS | at Object.<anonymous> (/usr/local/lib/node_modules/react-scripts/scripts/start.js:43:31)
WEB-CNSS | at Module._compile (node:internal/modules/cjs/loader:1101:14)
WEB-CNSS | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
WEB-CNSS | at Module.load (node:internal/modules/cjs/loader:981:32)
WEB-CNSS | at Function.Module._load (node:internal/modules/cjs/loader:822:12)
WEB-CNSS | at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
WEB-CNSS | at node:internal/main/run_main_module:17:47 {
WEB-CNSS | code: 'MODULE_NOT_FOUND',
WEB-CNSS | requireStack: [ '/usr/local/lib/node_modules/react-scripts/scripts/start.js' ]
WEB-CNSS | }
也许是我的 package.json 有一些错误,所以这里也是:
{
"name": "editor",
"version": "0.1.0",
"private": true,
"dependencies": {
"@babel/runtime": "^7.18.3",
"@convergence/convergence": "^1.0.0-rc.12",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^12.1.4",
"@testing-library/user-event": "^13.5.0",
"ace-builds": "^1.4.14",
"bootstrap": "^5.1.3",
"dropzone": "^6.0.0-beta.2",
"easymde": "^2.16.0",
"node-sass": "^7.0.1",
"react": "^18.0.0",
"react-ace": "^9.5.0",
"react-bootstrap": "^2.2.3",
"react-dom": "^18.0.0",
"react-drag-drop-files": "^2.3.7",
"react-dropzone": "^14.2.2",
"react-pro-sidebar": "^0.7.1",
"react-scripts": "5.0.0",
"react-simplemde-editor": "^5.0.2",
"react-sticky-box": "^1.0.2",
"simplemde": "^1.11.2",
"web-vitals": "^2.1.4"
},
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d build",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@convergencelabs/ace-collab-ext": "^0.6.0",
"gh-pages": "^4.0.0"
}
}
我还测试了 StackOverflow 上发布的其他类似问题的答案,但它们没有用。
【问题讨论】:
-
我认为问题出在安装的节点版本上。你检查过了吗?
-
您确定将 package-lock 复制到 dockerfile 中是正确的吗?我认为你应该复制 package.json 然后 npm install 来构建那个文件。
-
@Alen.Toma 我在 dockerfile 中使用的版本与我在本地计算机上安装的版本相同。我的同事甚至没有安装节点。但是,由于这是一个 docker 容器,FROM node:16.13.1 应该在容器上安装节点,不是吗?
-
我也试过没有包锁,但错误仍然存在。 @aliFalahati
标签: reactjs docker docker-compose