开发Gnome Shell和扩展时应该使用ES6还是Lang类?

时间:2018-09-05 02:42:38

标签: javascript linux gnome-shell gnome-shell-extensions gjs

我正在设计一个简单的gnome shell扩展,在gnome shell repo的HACKING.md中,它表示我们应该使用new Lang.Class()语言框架来初始化类。

但是,当我查看官方的gnome-shell扩展回购示例时,每个扩展都使用new Lang.Class()以外的es6类语法。

所以,我的问题是:我应该对外壳程序扩展使用es6类语法,并使用new Lang.Class()框架为gnome-shell本身做贡献吗?另外,在哪里可以获取有关gnome-shell是什么体系结构以及可以使用的完整api的更多信息?我搜索了google,所有信息似乎都已损坏或过时,这对像我这样的天真的家伙来说非常令人失望。

谢谢。

1 个答案:

答案 0 :(得分:2)

https://gitlab.gnome.org/GNOME/gnome-shell/issues/530#note_308621

以下是gnome-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类,我建议那些认真考虑移植的现有应用程序或扩展。

更笼统地说:使用问题跟踪程序作为支持论坛是非常无效的,因为在解决问题时,任何答案都趋于模糊,因此,除了原始的“报告者”之外,没有人会从中受益。这样会浪费开发人员的时间(没有花在解决实际问题上)。