Nouvelles Du Monde

Portage de GNOME Shell vers les modules JavaScript standard (ESM) : qu’est-ce que cela signifie pour les extensions ?

Portage de GNOME Shell vers les modules JavaScript standard (ESM) : qu’est-ce que cela signifie pour les extensions ?

A 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).

IMPORTATIONS ? MES ?

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.

Lire aussi  WhatsApp introduit en Europe la création d'avatars à partir d'un selfie

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 importer et exporter – 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.

Lire aussi  Avec 4 Data Var Group enrichit son offre ERP

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 :

1
2
3

import * as Main from 'resource:///org/gnome/shell/ui/main.js';
 
Main.notify('Loaded!');

2. Exporter une classe par défaut avec les méthodes activer() et désactiver() de votre extension.js.
Vous pouvez étendre la nouvelle classe Extension qui remplace l'API de commodité de l'ancien module ExtensionUtils.

1
2
3
4
5
6
7
8
9
10
11

import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
 
export default class MyTestExtension extends Extension {
enable() {
console.log(
Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT