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

2023-12-22

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

本地一切正常,正在运行yarn tsc and react-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 编译上失败,输出项目中大多数文件的编译错误。

如果我设置,我也可以在本地重现该内容ENV NODE_ENV production在我上面的 Dockerfile 中WORKDIR....

所以看来 Typescript 或react-scripts-tsNODE_ENV=production。我以前从未遇到过这个错误,我不知道如何调试它。跑步NODE_ENV=production tsc or NODE_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"]
}

任何建议将不胜感激! :)

EDIT:将环境变量参数添加到 Dockerfile 中。最初为了简洁起见,它被排除在外,但它最终成为问题和解决方案的一部分


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

移动定义NODE_ENV 下面/之后 yarn install in the Dockerfile解决了这个问题。

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再次强调,所以不要担心你的构建会变得臃肿。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 NODE_ENV=生产时,Typescript 编译失败(在 Docker 中) 的相关文章

随机推荐

  • Rails 中的全文 mysql 搜索

    我正在尝试将一个简单的 mysql 全文搜索添加到一个 请不要告诉我安装 solr 或任何其他搜索宝石 我尝试运行它们 这似乎是一个又一个问题 有一天我会抽出时间来做这件事 但那一天不是今天 我需要添加 add index 迁移 但是当我运
  • Visual Studio 2008 Express 无法识别我的 Sql Server 2008 Express

    我最近安装的顺序是 SQL Server 2008 Express 可视化 Web 开发人员速成 2008 当我右键单击 app data 并尝试添加数据库时 它返回 与 SQL Server 文件 mdf 的连接需要 SQL Server
  • 有没有办法在原生 CommonJS 环境中使用 JSX?

    我正在一个具有本机的环境中启动一个新项目CommonJS支持require模块 这是一个atom shell项目 不可能使用预编译步骤 例如在Browserify或webpack AFAIK中 我可以在我的设备上使用 JSXapp jsx在
  • JSON-WSP 或 JSON-RPC [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 Eclipse 与大型工作区结合使用

    我们当前的产品基于 Eclipse RCP 当我们尝试将整个代码库放在一个 Eclipse 工作区中并且我们想知道其他人在做什么时 我们开始遇到问题 这是我们的设置 225 个 eclipse 项目 全部在 trunk project 中
  • 没有 Springboard 的 iOS:由于没有系统事件服务器而终止

    我正在尝试使用 IB 与 Springboard 创建一个简单的 Hello World 应用程序 添加一个按钮及其与操作例程的连接后 我得到以下信息 由于没有系统事件服务器而终止 运行事件泵 或者如果您想运行 请传递参数 Register
  • SSE 浮点运算可以重现吗?

    x87 FPU 因使用内部 80 位精度模式而闻名 这通常会导致跨编译器和机器出现意外且不可重现的结果 在我的搜索中 https stackoverflow com questions 14864238 coercing floating
  • Java - 正则表达式替换美元符号之间的文本

    我正在使用 JAVA 并且想要替换美元符号之间的每个文本实例 例如 1st equation frac 1 mu 1 frac 2 pi lambda x 2nd equation 90 0 3rd equation frac mu t 2
  • 将系统设置为始终使用圆角字体?

    在 SwiftUI 中 有没有办法让系统字体的圆角版本成为所有样式的默认字体 我对应用程序中的所有文本使用一种系统样式 body title headline 等 例如 我可以在单个文本视图上使用它 Text some text font
  • 是什么导致 IE 8 在网站加载时暂停?

    大家好 我想看看你们中是否有人在 Internet Explorer 8 上经历过同样的事情 当我去加载我构建的网站时 我可以看到整个页面已加载 但它之前暂停了大约 8 秒您可以滚动或移动 一旦暂停完成 就可以滚动 但如果您单击不同的页面
  • 从 Swift REPL 中,如何获取可用模块的列表?

    从 Swift REPL 我可以通过以下方式导入 Foundation 等框架模块import Foundation 我可以在 REPL 上发出什么命令来生成可导入的所有模块的列表 附录 只是为了真正清楚我想要理解的内容 在 REPL 上
  • 在升级安装期间删除旧文件版本

    我正在 InstallShield Pro 2010 中使用纯 InstallScript 安装 我们的软件中的第三方 jar 文件已被替换为新版本 运行升级安装时 会安装新的 jar 但旧的 jar 也会保留 糟糕的事情接踵而至 如何让
  • 使用 Eclipse CDT/RSE/RDT 远程调试 C++ 应用程序

    我正在与 Eclipse 在 Windows 中 进行斗争 使其连接到我的 Linux 机器并在那里远程编译和调试 C 代码 我正在做的工作 安装 CDT RSE RDT Eclipse Juno CDT 8 1 2 PTP RDT 6 0
  • 创建 Spring 枚举 bean 并传递方法调用的值

    我有这个单例 public enum Elvis INSTANCE private int age public int getAge return age 我知道如何在 Spring 中创建枚举 bean
  • NextRouter 未安装 Next.JS

    Using import useRouter from next router as import useRouter from next navigation 抛出 pathname string query search string
  • 为什么我无法捕获 EJB 异常?

    我似乎无法在我的 java ee 6 项目中捕获 NoResultException 或 EJBException 等异常 我做错了什么吗 我在 EJB 容器之外捕获了异常 但这是我第一次使用 EJB 谢谢 Stateless public
  • Jenkins Copy Artifact 无法找到文件夹/multiProjectPipeline/branchWithSlash

    我在 Windows Server 2016 上有 Jenkins LTS 2 60 2 并使用这些插件 文件夹插件 6 1 0 复制神器 https wiki jenkins io display JENKINS Copy Artifac
  • chrome 扩展删除脚本标签

    我到处寻找这个问题的答案 我希望我的扩展能够禁用页面上的所有 javascript 但允许插入有效的 cotent 脚本 因此 chrome contentSettings javascript 目前不是有效选项 或者 我想要一种在任何脚本
  • Google Drive导出非Google doc文件

    我正在尝试使用以下代码从 Google 云端硬盘导出多个文件 String str application rft OutputStream outputStream new ByteArrayOutputStream driveServi
  • 当 NODE_ENV=生产时,Typescript 编译失败(在 Docker 中)

    所以我有一个create react app ts我想将其 Docker 化并托管在 Zeit Now 上的应用程序 本地一切正常 正在运行yarn tsc and react scripts ts build效果很好 通过以下 Docke