gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:17 25 4
gpt4 key购买 nike

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

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

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

如果我在 WORKDIR... 上方的 Dockerfile 中设置 ENV NODE_ENV production,我也可以在本地重现它。

所以当 NODE_ENV=production 时,Typescript 或 react-scripts-ts 的行为似乎有所不同。以前没遇到过这个错误,不知道怎么调试。运行 NODE_ENV=production tscNODE_ENV=production react-scripts-ts build 在本地也能正常工作。

我正在使用以下配置运行 Typescript 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"]
}

如有任何建议,我们将不胜感激! :)

编辑:将环境变量参数添加到 Dockerfile。它最初是为了简洁而被忽略,但它最终成为问题和解决方案的一部分

最佳答案

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

Dockerfile 中移动 NODE_ENV yarn 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,所以不要担心这会使您的构建膨胀。 :)

关于当 NODE_ENV=production 时,Typescript 编译失败(在 Docker 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52007806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com