描述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”等来表示不同的子类)。因此,我的_instances
Map在同一个键下有多个模型类示例,这就导致了问题。
所以我有:
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”。
1条答案
按热度按时间3ks5zfa01#
可能相关:webpack-contrib/uglifyjs-webpack-plugin#394的最大值
我看到有人使用
eject
和覆盖webpack配置来解决这个问题。我不想使用eject
,我现在怎么能保留类名呢?(这似乎是目前唯一的解决方案)create-react-app
的文档没有提到有一个配置来覆盖构建规则。