当 NODE_ENV=生产时,Typescript 编译失败(在 Docker 中)



所以我有一个create-react-app-ts应用程序,我想在Zeit Now上Dockerize和托管。

在本地一切正常,运行yarn tscreact-scripts-ts build效果很好。

创建 Docker 镜像也可以从以下 Dockerfile 中很好地工作:

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 时,构建脚本在 Typescript 编译时失败,输出项目中大多数文件的编译错误。

如果我在 Dockerfile 中设置ENV NODE_ENV production,我也能够在本地重现它WORKDIR....

因此,打字稿或react-scripts-tsNODE_ENV=production时似乎行为不同。我以前从未遇到过此错误,也不知道如何调试它。运行NODE_ENV=production tscNODE_ENV=production react-scripts-ts build在本地也可以正常工作。

我正在使用以下配置运行打字稿 v 3.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 args 添加到 Dockerfile。为了简洁起见,它最初被省略了,但它最终成为问题和解决方案的一部分

所以我终于找到了问题所在!在我的原Dockerfile中,NODE_ENV是在yarn install之前设定的。这意味着对于生产版本,yarn不会安装devDependencies,因此不会安装我的任何@types库。这导致了整个项目的所有编译错误。

NODE_ENV的定义移到Dockerfileyarn install下方/之后解决了这个问题。

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,所以不要担心这会让你的构建膨胀。 :)

相关内容

  • 没有找到相关文章

最新更新