En raison du passage de GNOME Shell aux modules JavaScript standard (ESM)
À l’heure actuelle, ce n’est probablement plus une nouvelle pour beaucoup : GNOME Shell est passé du système d’importation personnalisé de GJS aux modules JavaScript standard (ESM).
IMPORTS ? ESM ?
JavaScript est apparu dans les navigateurs web pour ajouter un peu d’interactivité à des pages par ailleurs statiques. Il n’était pas nécessaire de diviser de petits extraits de code en plusieurs fichiers, et le langage ne prévoyait donc pas de mécanisme pour cela.
Le problème s’est posé lorsque les gens ont commencé à écrire des programmes plus importants en JavaScript, et des environnements tels que node.js et GJS ont ajouté leurs propres systèmes d’importation pour organiser le code en plusieurs fichiers. En conséquence, les développeurs et les outils ont eu du mal à passer d’un environnement à l’autre.
Les choses ont changé en 2015 lorsque ECMAScript 6 a normalisé les modules, ce qui a donné lieu à une syntaxe bien définie et largement supportée par tous les principaux moteurs JavaScript. GJS supporte ESModules depuis 2021, mais le portage de GNOME Shell était une tâche bien plus importante qui devait être réalisée en une seule fois.
ALORS ? POURQUOI DEVRAIS-JE M’EN SOUCIER ?
Eh bien, il y a un tout petit inconvénient : Les modules et les importations héritées sont incompatibles en pratique.
Les modules sont chargés différemment des scripts, et certaines instructions - à savoir import et export - ne sont valables que dans les modules. Cela signifie qu’essayer d’importer un module avec le système existant entraînera une erreur de syntaxe si le module utilise l’une de ces instructions (ce qui est aussi probable qu’un pape soit catholique).
Les modules cachent également à l’extérieur tout ce qui n’est pas explicitement exporté. Ainsi, bien qu’il soit techniquement possible d’importer un script en tant que module, cela est aussi utile que d’importer un fichier vide.
QU’EST-CE QUE CELA SIGNIFIE POUR LES EXTENSIONS ?
Les extensions qui ciblent les anciennes versions de GNOME ne fonctionneront pas dans GNOME 45. De même, les extensions adaptées à GNOME 45 ne fonctionneront pas dans les anciennes versions.
Vous pouvez toujours prendre en charge plus d’une version de GNOME, mais vous devrez télécharger différentes versions sur extensions.gnome.org pour la prise en charge avant et après 45.
Il existe un guide de portage contenant des informations détaillées. Les deux changements les plus importants (qui seront suffisants pour de nombreuses extensions !) sont les suivants :
1. Utiliser la syntaxe standard pour importer des modules depuis gnome-shell :
123import * as Main from 'resource:///org/gnome/shell/ui/main.js';
Main.notify('Loaded!');
2. Exporter une classe par défaut avec les méthodes enable() et disable() de votre extension.js.
Vous pouvez étendre la nouvelle classe Extension qui remplace l’API de commodité de l’ancien module ExtensionUtils.
1234567891011import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
export default class MyTestExtension extends Extension {
enable() {
console.log(_('%s is now enabled').format(this.uuid));
}
disable() {
console.log(_('%s is now disabled.').format(this.uuid));
}
}
Enfin, vous pouvez toujours trouver des personnes sympathiques sur Matrix et Discourse qui seront heureuses de vous aider à résoudre vos problèmes de portage.
RÉSUMÉ
Passer du système d’importation personnalisé de GJS au standard de l’industrie ECMAScript 6 entraînera la rupture de toutes les extensions. Cependant, ce changement signifie de suivre les standards appropriés et non pas les standards maison, ce qui permet une plus grande compatibilité avec l’écosystème JavaScript.
Les importations héritées sont toujours prises en charge sur
extensions.gnome.org mais vous devrez télécharger un support pré et post GNOME 45 afin de prendre en charge à la fois les distributions LTS et régulières.
Pour les développeurs d’extensions GNOME :
Il existe une communauté active d’extensions qui peut vous aider à porter vos extensions vers le nouveau système d’importation de Matrix et Discourse qui peut vous aider à porter rapidement vos extensions vers la nouvelle version.
Vous pouvez tester vos extensions en téléchargeant la dernière version de GNOME OS et en essayant votre extension.
Source : GNOME, developpez.com
Et vous ?
Quel est votre avis sur le sujet ?