我正在尝试npm run start
使用--template typescript
. 因此安装了 Typescript(作为 React 依赖项),但我的 Docker 容器抱怨说不会安装 TypeScript 的一般错误消息。因此,我无法在 Docker 容器中启动应用程序。
package.json
当我在容器外启动应用程序(使用相同的 )时,一切正常。
错误
> frontend@0.1.0 start /app
> react-scripts start
It looks like you're trying to use TypeScript but do not have typescript installed.
Please install typescript by running npm install typescript.
npm ERR! Exit status 1
我通过添加 TypeScriptnpm install typescript
并重建了 Docker 容器。但它仍然显示错误消息。
即使在typescript
手动添加作为依赖项之后(甚至在直接调用npm install typescript
那里的容器内!),容器仍然抱怨无法找到 TypeScript(这似乎不是真的,因为我可以验证 TypeScript 安装在容器tsc -version
向我展示了正确的输出)。
代码
我的Dockerfile
样子是这样的:
FROM node:15.4.0-alpine3.12
# set working directory
ARG app_path=/app
WORKDIR ${app_path}
# add `node_modules/.bin` to $PATH
ENV PATH ${app_path}/node_modules/.bin:$PATH
# set Docker port
EXPOSE 3000
# copy configs, no need to copy src files as they get bind mounted later on (see docker-compose)
COPY package*.json ./
COPY tsconfig.json ./
# install all app dependencies
RUN npm install --silent
# validate typescript installation
RUN tsc --version
我的docker-compose.yaml
文件如下所示:
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: ../Dockerfile
image: frontend:dev
container_name: dev_frontend_react
ports:
- 4000:3000
command: ['npm', 'run', 'start']
volumes:
- ${HOST_PROJECT_PATH}/frontend:/app
# add a virtual volume to overwrite the copied node_modules folder as the
# container installs its own node_modules
- node_modules:/app/node_modules
environment:
- NODE_ENV=development
restart: unless-stopped
volumes:
node_modules:
name: frontend_node_modules
同样的问题,无效的解决方案
我在 StackOverflow 上找到了相同问题的另一个解决方案: 在构建 Docker 映像时要求安装 Typescript
但是这个解决方案是将项目硬拷贝到容器中并创建一个实际的构建。但是这个解决方案对我来说是不可接受的,因为它阻止了 React 的热重载功能工作。