create-react-app 多个类被损坏为“a”

e3bfsja2  于 2022-10-28  发布在  React
关注(0)|答案(1)|浏览(204)

描述Bug

我有一个名为BaseModel的基类,以及多个子类,如User、Foo、Bar等。它们都扩展了BaseModel。BaseModel类有一些逻辑,如:

static _instances = {};

constructor(initialData) {
    if (!BaseModel._instances[this.constructor.name]) {
      BaseModel._instances[this.constructor.name] = [];
    }
    BaseModel._instances[this.constructor.name].push(this);
}

这样我就可以引用该类的所有示例。问题是部署应用程序会将所有子类重命名为“a”(而不是使用“a”、“b”等来表示不同的子类)。因此,我的_instancesMap在同一个键下有多个模型类示例,这就导致了问题。
所以我有:

class User extends BaseModel {}
class Foo extends BaseModel {}
class Bar extends BaseModel {}

但在生产代码中,this.constructor.name对于所有这些对象(User、Foo、Bar)都是“a”。

是否尝试恢复依赖项?

不适用

环境

current version of create-react-app: 5.0.0
  running from /Users/jashsayani/.npm/_npx/c67e74de0542c87c/node_modules/create-react-app

  System:
    OS: macOS 12.1
    CPU: (8) arm64 Apple M1 Pro
  Binaries:
    Node: 16.13.0 - /usr/local/bin/node
    Yarn: Not Found
    npm: 8.1.0 - /usr/local/bin/npm
  Browsers:
    Chrome: 96.0.4664.110
    Edge: Not Found
    Firefox: Not Found
    Safari: 15.2
  npmPackages:
    react: ^17.0.1 => 17.0.1
    react-dom: ^17.0.1 => 17.0.1
    react-scripts: 4.0.1 => 4.0.1
  npmGlobalPackages:
    create-react-app: Not Found

重现步骤

1.创建类BaseModel并从上面复制构造函数。
1.创建子类User、Foo、Bar等。
1.创建User、Foo、Bar等的示例(const f = new Foo();
1.请注意,this.constructor.name的值在构造函数中为“a”(当创建Foo、Bar等的示例时),其中包含部署构建代码(非本地服务器)

预期行为

this.constructor.name的值应根据不同的子类为“a”、“b”、“c”等

实际行为

创建多个子类的示例会导致this.constructor.name为“a”。

3ks5zfa0

3ks5zfa01#

可能相关:webpack-contrib/uglifyjs-webpack-plugin#394的最大值
我看到有人使用eject和覆盖webpack配置来解决这个问题。我不想使用eject,我现在怎么能保留类名呢?(这似乎是目前唯一的解决方案)
create-react-app的文档没有提到有一个配置来覆盖构建规则。

相关问题