本文介绍了当NODE_ENV=PROUCTION时,类型脚本编译失败(在Docker中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以我现在有一个create-react-app-ts
应用程序,我想将其Dockerize并托管在Zeit上。
yarn tsc
和react-scripts-ts build
运行得很好。从以下Docker文件创建Docker镜像也很有效:
FROM mhart/alpine-node:10.9
WORKDIR /usr/src
ARG REACT_APP_API_ENDPOINT
ARG NODE_ENV
COPY yarn.lock package.json ./
RUN yarn
COPY . .
RUN yarn build && mv build /public
但是,当发布到Now时,构建脚本在类型脚本编译时失败,并为项目中的大多数文件输出编译错误。如果我在WORKDIR...
上方的Dockerfile中设置了ENV NODE_ENV production
,我也可以在本地复制它。因此,当NODE_ENV=production
时,似乎TypeScrip或react-scripts-ts
的行为不同。我以前从来没有遇到过这个错误,我不知道如何调试它。运行NODE_ENV=production tsc
或NODE_ENV=production react-scripts-ts build
在本地也运行得很好。
我正在使用以下配置运行TypeScrip v3.0.1:
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "build/dist",
"module": "esnext",
"target": "es6",
"lib": ["es6", "dom", "esnext.asynciterable"],
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true,
"allowSyntheticDefaultImports": true,
"strict": true
},
"exclude": ["node_modules", "build", "scripts", "acceptance-tests", "webpack", "jest", "src/setupTests.ts"]
}
任何建议都将不胜感激!:)
编辑:将env var参数添加到Dockerfile中。为简洁起见,最初将其省略,但最终成为问题和解决方案的一部分
推荐答案
终于找到问题了!在我最初的Dockerfile
中,NODE_ENV
设置在yarn install
之前。这意味着对于生产版本,yarn
不会安装devDependencies
,因此也不会安装我的任何@types
库。这导致了整个项目的所有编译错误。
将NODE_ENV
yarn install
的定义移到Dockerfile
中的NODE_ENV
的定义解决了该问题。
FROM mhart/alpine-node:10.9
WORKDIR /usr/src
COPY yarn.lock package.json ./
RUN yarn
ARG REACT_APP_API_ENDPOINT
ARG NODE_ENV
COPY . .
RUN yarn build && mv build /public
注意:据我所知,yarn build
将确保再次删除devDependencies
,所以不要担心这会使您的构建膨胀。:) 这篇关于当NODE_ENV=PROUCTION时,类型脚本编译失败(在Docker中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!