javascript - uglify / webpack for production 之后的每个类的 Class.name 始终为“e”
问题描述
我有一个在开发环境中运行良好但在生产环境中运行不正常的应用程序,这是由 uglify 引起的(我认为是这样)
我有一个用户构建的数据,我将其保存到文件或 LocalStorage(两种情况下都是 json,所以没关系)。
该结构由 3 种类型的节点构成。我已经在基类中实现了属性(都从一个类继承):type =this.constructor.name
它在开发中工作得很好。当我加载应用程序并读取缓存时,我会遍历 JSON 并使用switch (obj.type) case class1.name...
etc 重建对象。它运行良好。
但是,当我为生产构建时,当我调用class1.name
orclass2.name
或class3.name
它全部返回时e
,这使得无法恢复正确的对象......
我不认为这是特定于框架的问题,但如果有人需要知道我使用 VueJS 和 Quasar Framework 构建。
有任何想法吗?
解决方案
constructor.name
或任何其他函数name
属性永远不应该在客户端 JavaScript 中被依赖,这正是因为在生产环境中缩小是必须的,并且具有有意义名称的函数成为单字母命名函数。e
是使用 UglifyJS 缩小的函数的通用名称。这就是为什么 uglified JS 文件比 unminified 文件占用更少的原因。
如果函数/类名用于除调试以外的任何用途,则应将它们显式指定为静态属性。由于name
无法在某些引擎中重新定义,因此可以使用非标准displayName
(也可用于调试)或任何其他属性名称:
class Foo {
static get id() { return 'Foo' }
...
}
或者:
class Foo {
...
}
Foo.id = 'Foo';
推荐阅读
- reactjs - 如何在 AppBar 中的排版和选项卡之间留出更多空间
- javascript - 任何人都可以帮助从图像 url 获取文件输入对象
- python - 从 html 标签中提取原始邮件
- django - 根据 Django 中的字段从 QuerySet 中制作计数字典的更好方法?
- javascript - 重复向另一台服务器发送请求,直到达到预期的结果
- swift - 使用损坏的或有风险的密码算法加密算法。不应使用 base64EncodedString
- c# - 无法使用 asp.net core Graph API 在 Azure AD B2C 中创建自定义属性
- android - Android 不包括本机库
- python - 尽管我从参考资料中获得了相同的代码,但我无法让我的网站显示其内容
- android-studio - 如何制作开发阶段/文档 - 用于上传到任何网站的 Android Studio 应用的 PDF