当NODE_ENV=PROUCTION时,类型脚本编译失败(在Docker中) [英] Typescript compilation fails (in Docker) when NODE_ENV=production

查看:20
本文介绍了当NODE_ENV=PROUCTION时,类型脚本编译失败(在Docker中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

在本地运行一切正常,运行yarn tscreact-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 tscNODE_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_ENVyarn 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中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆