【问题标题】:Extending HttpErrorResponse leads to error Cannot find module '@angular/common/http'扩展 HttpErrorResponse 导致错误找不到模块'@angular/common/http'
【发布时间】:2023-03-20 00:36:01
【问题描述】:

我有一个模型(在单独的文件中定义),它使用自定义属性扩展了 HttpErrorResponse。自定义属性是一个属性很少的接口:

import { HttpErrorResponse } from '@angular/common/http';

export interface ApiErrorBody {
  id: number;
  code: string;
  message?: string;
  trace?: string;
}

export class ApiErrorResponse extends HttpErrorResponse {
  public error: ApiErrorBody;
}

此代码在调试模式下运行良好,但在编译到 prod 时,我在运行时看到错误:

错误:找不到模块'@angular/common/http'

如果我删除扩展并仅填充与 HttpErrorResponse 相同的属性,则代码在 prod 中可以正常工作,但我需要保留扩展语法。

export interface ApiErrorBody {
  id: number;
  code: string;
  message?: string;
  trace?: string;
}

// no extension
export class ApiErrorResponse {
  public error: ApiErrorBody;
  public status: number;
  public message: string;
  piblic url: string;
}

这个模型是从多个组件和拦截器中引用的,它们都依赖于@angular/common/http,所以我的问题是——我在这里错过了什么以及为什么它在调试中有效但在调试中无效产品模式?

【问题讨论】:

  • 运行时什么时候失败?如果控制台有错误,请提供这些错误的图片。
  • 它实际上托管在 Electron 应用程序中,当我启动应用程序时,我看到以下错误消息:prntscr.com/stih93
  • 你的角度版本是什么?较旧的 Angular 版本使用 @angular/http
  • 那么这可能是一个电子特定的问题,但我对此一无所知。您可以尝试在生产模式下在http-server 上运行您的项目,看看它是否在那里工作。我看不出这不起作用的原因。

标签: angular angular8 electron-builder


【解决方案1】:

问题出在 package.json
@angular/common 包在 devDependencies 中。根据 Electron builder (https://www.electron.build/configuration/contents) 的文档,开发依赖项从未复制到生成的包中。

将以“@angular”开头的依赖项移动到 package.json 中 devDependencies 部分的依赖项解决了这些问题。

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2018-11-10
    • 2018-01-23
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多