javascript - 在开发 Gnome Shell 和扩展时我应该使用 ES6 还是 Lang 类?
问题描述
我正在开发一个简单的 gnome shell 扩展,在HACKING.md
gnome shell repo 中,它说我们应该使用new Lang.Class()
语言框架来初始化一个类。
但是,当我查看官方 gnome-shell 扩展存储库示例时,每个扩展都使用 es6 类语法,而不是new Lang.Class()
.
所以,我的问题是:我应该对 shell 扩展使用 es6 类语法并使用new Lang.Class()
框架为 gnome-shell 本身做贡献吗?另外,我在哪里可以获得有关 gnome-shell 是什么架构以及我可以使用的完整 api 的更多信息?我搜索谷歌,所有信息似乎都已损坏或过时,这对于像我这样天真的人来说非常失望。
谢谢你。
解决方案
https://gitlab.gnome.org/GNOME/gnome-shell/issues/530#note_308621
以下是 gnome-shell 开发人员的回答:
所以,我的问题是:我应该为 shell 扩展使用 es6 类语法,并使用新的 Lang.Class() 框架为 gnome-shell 本身做贡献吗?
现在:是的。
gjs 中对 ES6 类的支持还是比较新的,这就是为什么你仍然会发现很多使用之前使用的 Lang.Class 框架的原因。在 gnome-shell 的情况下,扩展形式还有一个额外的复杂性:
const Lang = imports.lang;
const Foo = new Lang.Class({
Name: 'Foo'
});
// this works
class Bar extends Foo {}
class Baz {}
// this doesn't
var Quz = new Lang.Class({
Name: 'Quz',
Extends: Baz
});
该计划当然是移植 gnome-shell 以使用 ES6 类,但它会破坏仍然使用 Lang.Class 继承自 gnome-shell 中定义的类的所有扩展。所以这不是我们应该逐渐潜入的东西,而是一个明确的开关,有足够的余地让扩展开发人员在必要时调整他们的代码(我希望在 3.32 周期的早期建立一个本地分支,所以敲木头)。
所以 TL;DR:
新的应用程序或扩展应该最终使用 ES 6 类,我会向他们认真考虑移植的现有应用程序的开发人员推荐。
更笼统地说:使用问题跟踪器作为支持论坛是非常无效的,因为当问题关闭时,任何答案都会变得晦涩难懂,因此除了最初的“报告者”之外,可能没有人会从中受益。这使得开发人员时间的使用非常糟糕(没有花在解决实际问题上)。
推荐阅读
- azure-ad-b2c - Azure B2C 自定义注册页面验证问题
- arrays - Swift 2 从包含字符串的数组中删除对象
- regex - 从文本文件中删除行号
- excel - 同时更改循环VBA的变量
- file - Netlogo 文件打开错误“预期 nlogo 文件有 12 个部分,这有 1 个”
- apache-kafka - 以最小延迟向 Kafka 添加元素的快速协议?
- ios - UICollectionView 自定义布局单元格类型相关属性
- java - 骰子 JAVAFX 的最后一个值
- android - 应用程序快捷方式:minSdk<25 的 Lint 警告
- scala - 带有 Ordering 和 ClassTag 的 scala 多态类型签名