IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La prochaine version de GNOME 45 rompra la compatibilité ascendante des extensions
En raison du passage de GNOME Shell aux modules JavaScript standard (ESM)

Le , par Anthony

19PARTAGES

5  0 
À 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 :

Code : Sélectionner tout
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 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.

Code : Sélectionner tout
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(_('%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

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi

GNOME 45 bêta améliore la couleur et la performance, mais ne propose pas de nouveauté majeure, il devrait être disponible le mois prochain

Sortie officielle de GNOME 44 "Kuala Lumpur " qui inclut GTK4 d'Epiphany, une grille de choix de fichiers, des réglages rapides améliorés et des réglages grandement améliorés

GNOME 43 est disponible avec un nouveau panneau de sécurité pour les périphériques et poursuit la transition vers GTK 4, il apporte également des améliorations au gestionnaire de fichiers

Une erreur dans cette actualité ? Signalez-nous-la !