Three.js: Évaluer les classes ES6

CrĂ©Ă© le 19 juin 2017  Â·  92Commentaires  Â·  Source: mrdoob/three.js

Pourquoi cet "idiome" d'héritage est-il introduit dans le code :

PointLight.prototype = Object.assign( Object.create( Light.prototype ), {

Sérieusement? Fonction(Fonction imbriquée(ParentPrototype) VIRGULE SHOTGUN BRACKET ?

Le style fidÚle à deux lignes toujours présent, par exemple, dans les classes de matériaux est beaucoup plus clair et plus propre. Attribuez le prototype, puis définissez le constructeur. La fin. S'il vous plaßt, ne ruinez pas la bibliothÚque en attrapant la maladie JavaScript - le besoin bizarre de se masturber dans la façon dont les objets et l'héritage sont codés. Un style dans toute la bibliothÚque. Pas besoin de le changer.

Suggestion

Commentaire le plus utile

Jusqu'à ce que les navigateurs puissent exécuter nativement TypeScript, je préfÚre continuer à utiliser JavaScript.

Tous les 92 commentaires

Donc, vous suggérez d'utiliser ce modÚle à la place ?

PointLight.prototype = Object.create( Light.prototype );
Object.assign( PointLight.prototype, {
class PointLight extends Light

hĂ© hĂ© 😄 Et aucun problĂšme...

@sasha240100 un jour...

@mrdoob pas tout à fait - les deux façons que vous mentionnez sont directement équivalentes. Je pense que l'OP compare

PointLight.prototype = Object.assign( Object.create( Light.prototype ), { 
    constructor: PointLight,
    prop1: 'something',
    method1: function someFunction() { .. },
    ...
});

avec

function PointLight () { ... };

PointLight.prototype = Object.create( Light.prototype );

PointLight.prototype.constructor = PointLight;

PointLight.prototype.prop1 = 'something';

PointLight.prototype.method1 = function someFunction() { .. };

...

C'est comme ça que ça se passe ici par exemple.
Autant que je sache, ces styles sont Ă©quivalents - y a-t-il quelque chose qui me manque?
Ou le style a-t-il été modifié pour utiliser Object.Assign une fois qu'il est devenu disponible et non mis à jour dans la base de code ?

@looeee @bfred-it @mrdoob Pourquoi ne pas simplement utiliser rollup-babel ?

Comparatif :
Courant. modules d'harmonie es5 + es6.

import { LineBasicMaterial } from './LineBasicMaterial';
import { Color } from '../math/Color';

function LineDashedMaterial( parameters ) {

    LineBasicMaterial.call( this );

    this.type = 'LineDashedMaterial';

    this.scale = 1;
    this.dashSize = 3;
    this.gapSize = 1;

    this.setValues( parameters );

}

LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );
LineDashedMaterial.prototype.constructor = LineDashedMaterial;

LineDashedMaterial.prototype.isLineDashedMaterial = true;

LineDashedMaterial.prototype.copy = function ( source ) {

    LineBasicMaterial.prototype.copy.call( this, source );

    this.scale = source.scale;
    this.dashSize = source.dashSize;
    this.gapSize = source.gapSize;

    return this;

};


export { LineDashedMaterial };

ES2015+. MĂȘme code, mais es2015+ avec babel-plugin-transform-class-properties :

import { LineBasicMaterial } from './LineBasicMaterial';
import { Color } from '../math/Color';

export class LineDashedMaterial extends LineBasicMaterial {
  type = 'LineDashedMaterial';

  scale = 1;
  dashSize = 3;
  gapSize = 1;
  isLineDashedMaterial = true;

  constructor(parameters) {
    super();
    this.setValues( parameters );
  }

  copy(source) {
    super.copy(source);

    this.scale = source.scale;
    this.dashSize = source.dashSize;
    this.gapSize = source.gapSize;

    return this;
  }
}

Fonctionnalités ES6 qui simplifieraient le code three.js :

Je suis tout Ă  fait d'accord pour passer Ă  ES2015+, nous avons juste besoin de trouver un moyen de produire un code similaire Ă  celui que nous avons actuellement, afin que les performances restent les mĂȘmes dans tous les cas.

J'ai une question dans le contexte des cours. Comment transférerions-nous des méthodes comme Vector3.unproject dans la syntaxe de la classe ? La méthode utilise en fait une fermeture afin de créer une nouvelle portée. Il s'agit d'un mécanisme important qui maintient le nombre de créations d'objets aussi bas que possible.

Avons-nous besoin Object.assign dans ces cas ?

@Mugen87 @mrdoob Quelques informations intéressantes sur les performances d'es6. Surtout sur Object.assign :
image
De cet article

Comment transférerions-nous des méthodes comme Vector3.unproject dans la syntaxe de la classe ? La méthode utilise en fait une fermeture afin de créer une nouvelle portée.

@ Mugen87 Ne peuvent-ils pas simplement ĂȘtre des objets de portĂ©e de module non exportĂ©s? Quelque chose comme ça;

const tempMatrix = new Matrix();    

export default class Vector3{
    unproject() {
        // uses tempMatrix
    }
}

Ah oui, je pense que ça devrait marcher 😊

@mrdoob Wow ! Il semble déjà fonctionner. Ne pouvons-nous pas créer une branche, transformer certaines classes en es6 et voir comment cela se compile ?


@ satori99 Comme idée de la façon de conserver tempMatrix dans le code Vector3 pour éviter les problÚmes avec les globales :

export default class Vector3 {
    static tempMatrix = new Matrix();

    unproject() {
        // uses Vector3.tempMatrix
    }
}

@mrdoob Wow ! Il semble déjà fonctionner. Ne pouvons-nous pas créer une branche, transformer certaines classes en es6 et voir comment cela se compile ?

Cela me paraĂźt bien! Je me concentre actuellement sur WebVR, il faudra donc que ce soit quelqu'un d'autre que moi.

@ sasha240100 L'avantage d'utiliser des variables de portée de module est qu'elles restent cachées du code utilisateur normal, ce qui semble approprié pour les variables temporaires.

Cela ne me dérange pas l'approche pythonistique "Nous sommes tous des adultes ici" en ce qui concerne les variables privées, mais les variables temporaires ne devraient pas vraiment polluer inutilement l'espace de noms.

De plus, ce serait bien si ceux d'entre nous qui ont activé le support des modules natifs dans nos navigateurs pouvaient charger directement les fichiers src. C'est une façon bien plus agréable de développer, sans avoir besoin de watchers et de transpiler aprÚs chaque montage. L'utilisation de propriétés de classe signifie que cela n'est pas possible car elles ne font pas partie de la spécification de classe actuelle.

Toutes mes excuses pour l'intervention. Nous devrions probablement changer le titre du problĂšme en quelque chose comme - "Évaluer les classes ES6", puisque maintenant le fil a changĂ© en quelque chose de complĂštement diffĂ©rent.

Pourquoi changer le motif @Mugen87 @satori99 ?

method =(()=>{ 
    const vec3forThisScope =...; 
    return (arg)=>{...}
})()

Pourquoi ne pas essayer le tapuscrit, il peut ĂȘtre compilĂ© dans d'autres versions de js

TypeScript serait vraiment une excellente option à considérer car il s'agit d'un transpiler + vérificateur de type et d'un sur-ensemble de JavaScript, il est donc facile de déplacer une base de code vers des fichiers .ts et de refactoriser progressivement vers ES6 avec vérification de type.

Cela peut sembler effrayant si vous n'avez jamais utilisé TypeScript, mais ce n'est vraiment pas une grande courbe d'apprentissage et ce serait un petit prix à payer pour les avantages que cela apporterait. La communauté TypeScript serait trÚs heureuse d'aider à cette transition et de créer des tests de performances par rapport à la bibliothÚque actuelle pour s'assurer qu'elle n'est pas rétrogradée.

Quelques articles utiles :

Pour citer le dĂ©veloppeur principal Anders Hejlsberg, TypeScript est nĂ© en rĂ©ponse aux plaintes des clients et des Ă©quipes internes selon lesquelles JavaScript ne se prĂȘtait pas bien aux grandes applications.

L'objectif Ă©tait de "renforcer JavaScript avec des Ă©lĂ©ments tels que les classes, les modules et le typage statique", sans sacrifier l'avantage d'ĂȘtre aux normes ouvertes et multiplateforme ; le rĂ©sultat Ă©tait un "langage pour le dĂ©veloppement javascript Ă  l'Ă©chelle des applications", construit comme un sur-ensemble du langage.

Jusqu'à ce que les navigateurs puissent exécuter nativement TypeScript, je préfÚre continuer à utiliser JavaScript.

@mrdoob

Je ne vois pas cela comme une raison valable de ne pas utiliser TypeScript uniquement parce qu'il ne peut pas ĂȘtre exĂ©cutĂ© directement dans le navigateur. Vous ne voudriez pas qu'il s'exĂ©cute dans le navigateur Ă  cause de toutes les lignes de code supplĂ©mentaires destinĂ©es uniquement Ă  la vĂ©rification du temps de compilation. Ce n'est pas actuellement un langage de vĂ©rification d'exĂ©cution. Donc, s'il a dĂ©jĂ  Ă©tĂ© utilisĂ© dans le navigateur, il est plus que probable que tout le code tapĂ© sera supprimĂ© car cela a un impact sur les performances et il s'agirait alors de code JavaScript vanille.

Je pense que vous passez totalement Ă  cĂŽtĂ© de l'intĂ©rĂȘt d'utiliser un langage typĂ© et des avantages qu'il prĂ©sente dans le dĂ©veloppement dans une grande base de code. Vous Ă©crivez et utilisez toujours JavaScript, tout l'intĂ©rĂȘt de TypeScript est qu'il s'agit d'un sur-ensemble de JavaScript. Vous Ă©crivez du JavaScript avec des types, qui sont compilĂ©s en JavaScript dans la version cible ECMAScript spĂ©cifiĂ©e, qui est configurable dans les options du compilateur, les valeurs autorisĂ©es sont 'es3', 'es5', 'es2015', 'es2016', 'es2017' ou ' essuivant'.

Parce que Typescript est JavaScript, il permet de migrer progressivement sans avoir Ă  se soucier de tout refactoriser en mĂȘme temps. Cela peut ĂȘtre fait progressivement et amĂ©liorĂ© par la communautĂ©. Ce n'est pas plus de travail que ce qui est discutĂ© ici avec la refactorisation pour utiliser les classes ES6. C'est la seule raison pour laquelle je le mentionne ici au lieu d'ouvrir un nouveau sujet.

Voir les liens de terrain de jeu TypeScript ci-dessous pour d'excellents exemples :

@joejordanbrown

Pouvez-vous penser Ă  quelqu'un qui pourrait ĂȘtre en dĂ©saccord avec vous sur le fait que le tapuscrit est la meilleure solution Ă  ce problĂšme particulier ?

Si vous tapez typescript vs dans Google, quelques termes apparaissent, l'un d'eux Ă©tant Flow. La recherche de cela semble donner un certain nombre d'articles oĂč les gens dĂ©battent des avantages et des inconvĂ©nients de ces deux.

Aucun type ne semble ĂȘtre plus un compromis que de choisir l'un d'entre eux.

Enregistrez Typescript pour les projets plus compliquĂ©s que le rĂ©sultat qu'ils crĂ©ent - en particulier les frameworks frontaux qui auraient pu ĂȘtre implĂ©mentĂ©s en HTML en premier lieu. Mon point de dĂ©part Ă©tait de se dĂ©barrasser de la maladie JavaScript, pas de l'aggraver. JavaScript est un langage simple presque jouet qui est parfois utilisĂ© pour des rĂ©sultats complexes comme three.js. Le tapuscrit est inutile.

Le 6 septembre 2017, Ă  13h55, Joe [email protected] a Ă©crit :

@mrdoob

Je ne vois pas cela comme une raison valable de ne pas utiliser TypeScript uniquement parce qu'il ne peut pas ĂȘtre exĂ©cutĂ© directement dans le navigateur. Vous ne voudriez pas qu'il s'exĂ©cute dans le navigateur Ă  cause de toutes les lignes de code supplĂ©mentaires destinĂ©es uniquement Ă  la vĂ©rification du temps de compilation. Ce n'est pas actuellement un langage de vĂ©rification d'exĂ©cution. Donc, s'il a dĂ©jĂ  Ă©tĂ© utilisĂ© dans le navigateur, il est plus que probable que tout le code tapĂ© sera supprimĂ© car cela a un impact sur les performances et il s'agirait alors de code JavaScript vanille.

Je pense que vous passez totalement Ă  cĂŽtĂ© de l'intĂ©rĂȘt d'utiliser un langage typĂ© et des avantages qu'il prĂ©sente dans le dĂ©veloppement dans une grande base de code. Vous Ă©crivez et utilisez toujours JavaScript, tout l'intĂ©rĂȘt de TypeScript est qu'il s'agit d'un sur-ensemble de JavaScript. Vous Ă©crivez du JavaScript avec des types, qui sont compilĂ©s en JavaScript dans la version cible ECMAScript spĂ©cifiĂ©e, qui est configurable dans les options du compilateur, les valeurs autorisĂ©es sont 'es3', 'es5', 'es2015', 'es2016', 'es2017' ou ' essuivant'.

Parce que Typescript est JavaScript, il permet de migrer progressivement sans avoir Ă  se soucier de tout refactoriser en mĂȘme temps. Cela peut ĂȘtre fait progressivement et amĂ©liorĂ© par la communautĂ©. Ce n'est pas plus de travail que ce qui est discutĂ© ici avec la refactorisation pour utiliser les classes ES6. C'est la seule raison pour laquelle je le mentionne ici au lieu d'ouvrir un nouveau sujet.

Voir Liens de terrain de jeu TypeScript pour des exemples :

Exemple JavaScript classique
Exemple d'ajout de types
Ajout de types avec erreur Exemple
Exemple d'utilisation de classes
Utilisation de classes avec erreur Exemple
—
Vous recevez ceci parce que vous ĂȘtes l'auteur du fil.
Répondez directement à cet e-mail, consultez-le sur GitHub ou désactivez le fil de discussion.

^ Je serais bien mĂȘme avec le motif monstrueux, tant qu'il est cohĂ©rent.

@joejordanbrown a l' air d'ĂȘtre amoureux du tapuscrit. n'hĂ©sitez pas Ă  bifurquer le projet et Ă  le porter en tapuscrit. trois.ts ! 🙌

@pailhead

C'est une question de choix, je suis sûr que beaucoup seront d'accord et pas d'accord, c'est tout à fait normal ! Vous allez toujours voir "ceci contre cela", "le mien est meilleur que le vÎtre". Je comprends que chacun a ses propres avantages. Il s'agit d'évaluer les options disponibles et de voir si elles peuvent bénéficier au projet. Les comparaisons sont une bonne chose, cela pousse les projets plus loin.

Vous mentionnez Flow, les problÚmes que je vois avec cela sont :

  • La licence Flow est une licence BSD Ă  3 clauses " Facebook BSD + Patents License ", Apache Software Foundation a interdit l'utilisation de cette licence dans de nouveaux projets. Vous pouvez lire plus de dĂ©tails ici .

  • Le support IDE fait dĂ©faut par rapport Ă  TypeScript.

  • La base d'utilisateurs est petite par rapport Ă  TypeScript,

  • Les typages disponibles pour les bibliothĂšques publiques sont incomplets, TypeScript a beaucoup de typages bien entretenus.

  • La documentation et les ressources sont difficiles Ă  trouver et sont vagues par rapport Ă  TypeScript, vous trouverez une excellente documentation, des livres, des vidĂ©os et de nombreuses autres ressources d'apprentissage en ligne.

  • Flow utilise des fichiers .js qui sont marquĂ©s avec // @flow , cela peut ĂȘtre dĂ©routant car vous voyez l'extension .js alors attendez-vous Ă  JavaScript mais en fait, c'est FlowType. OĂč comme TypeScript utilise sa propre extension .ts . Cela vous permet Ă©galement d'avoir les fichiers de sortie TypeScript et JavaScript avec des noms identiques dans le mĂȘme rĂ©pertoire, ce qui est idĂ©al pour un petit projet, Ă©videmment, ce ne serait pas le cas sur un grand projet car vous utiliseriez un build systĂšme pour gĂ©rer le processus de construction.

MĂȘme Google soutient TypeScript de maniĂšre considĂ©rable, ce qui montre la confiance qu'ils ont dans TypeScript. Lire le post ici ou ici .

Typescript est devenu autorisé pour le développement client sans restriction à partir de mars 2017. TypeScript et Angular sur TypeScript sont utilisés dans Google Analytics, Firebase et Google Cloud Platform et des outils internes critiques tels que le suivi des bogues, les évaluations des employés et les outils d'approbation et de lancement des produits.

Je pensais juste ouvrir la discussion sur l'utilisation d'un langage typé et voir ce que tout le monde pense de l'idée. Il semble que @mrdoob soit totalement opposé à la discussion de l'idée.


@arctwelve
Je ne vois pas en quoi ce projet n'est pas compliqué et en quoi l'utilisation d'un langage typé l'affecterait négativement.


@mrdoob
Pas du tout, je peux juste voir les avantages que cela pourrait avoir, surtout si une nouvelle branche est créée pour mettre à jour les classes ES6. Je pense que répondre en créant votre propre fork appelé three.ts est juste idiot. C'est vraiment contre les bonnes pratiques OSS si tout le monde se contente de forger des projets OSS et de modifier son propre code source au lieu de se concentrer sur le projet 1 et de le rendre le meilleur possible. Vous vous retrouveriez avec un logiciel vraiment médiocre ou des communautés se séparant et se concentrant sur le projet qu'elles préfÚrent pour une raison quelconque. Pourquoi ne pouvez-vous pas avoir une discussion ouverte sur les avantages et les inconvénients ?

Pas pour jouer l'avocat du diable, mais on dirait qu'il l'a fait

avoir une discussion ouverte

c'Ă©tait juste trĂšs court :)

Je partage un point de vue similaire, c'est une bibliothÚque JS et JS est standardisé. Vous ne pouvez pas vous tromper en choisissant JS pour une bibliothÚque JS, alors que vous le pouvez si vous choisissez autre chose. Je viens de prendre Flow comme l'une des alternatives au tapuscrit, je ne sais pas s'il y en a d'autres.

Quoi qu'il en soit, il semble que nous nous sommes vraiment éloignés du sujet.

Mugen87 a changé le titre de
Supprimer la maladie JavaScript pour Ă©valuer les classes ES6

Le titre original faisait référence (pour autant que je sache) au manque de cohérence de style. En particulier en utilisant Object.assign() à certains endroits, et un autre modÚle à d'autres.
Si j'évaluais quelque chose ici, ce serait le titre actuel du numéro. Pourquoi la question de la cohérence est-elle élevée au rang de discussion sur l'utilisation d'un nouveau langage ?

J'imagine qu'avec dactylographie et es6, le code devrait ĂȘtre assez cohĂ©rent.

Je résoudrais ce problÚme en mettant à jour cette page :

https://github.com/mrdoob/three.js/wiki/Mr.doob's-Code-Style%E2%84%A2

et en ajoutant soit :

A) "... utiliser Object.assign ..."
B) "... n'utilisez pas Object.assign"

Un style dans toute la bibliothĂšque. Pas besoin de le changer.

Le style fidÚle à deux lignes toujours présent, par exemple, dans les classes de matériaux est beaucoup plus clair et plus propre.

C'est dans le premier message.

Je suggĂšre:

  1. éditez le titre pour refléter cette phrase, discutez d'avoir un style dans toute la bibliothÚque, éditez le guide de style, etc.
  2. dĂ©marrer une nouvelle discussion intitulĂ©e "Ă©valuer les classes es6", oĂč les classes es6 seraient Ă©valuĂ©es
  3. dĂ©marrer une nouvelle discussion intitulĂ©e "Ă©valuer le fait d'avoir trois Ă©crits dans une langue dactylographiĂ©e", oĂč le tapuscrit et autres seraient discutĂ©s

Quoi qu'il en soit, il semble que nous nous sommes vraiment éloignés du sujet.

En effet. @joejordanbrown , n'hésitez pas à créer un nouveau sujet pour discuter de TypeScript.

Au fait, c'est aussi une mauvaise pratique OSS d'ignorer les conversations précédentes... https://github.com/mrdoob/three.js/issues/341#issuecomment -47000692

Retour au sujet. Je pensais que nous avions déjà résolu ce problÚme ?

https://github.com/mrdoob/three.js/issues/11552#issuecomment -319449068

Nous avons juste besoin de quelqu'un pour essayer.

Bon alors... tout d'abord

Premier modĂšle (le meilleur IMO):

function MyClass() {...}

MyClass.prototype = Object.assign( Object.create( MyClassToInherit.prototype ), {

    constructor: MyClass,

    prop1: 'something',

    method1: function someFunction() { .. },

    ...

});

Le deuxiĂšme modĂšle :

function MyClass() {...}

MyClass.prototype = Object.create( MyClassToInherit.prototype );

MyClass.prototype.constructor = PointLight;

MyClass.prototype.prop1 = 'something';

MyClass.prototype.method1 = function someFunction() { .. };

...

@arctwelve Ce modÚle a été introduit pour de nombreuses raisons. Ce n'est pas se masturber !

Tout d'abord cela permet une lecture claire sur l'héritage d'objet. Le Object.assign concerne clairement l'héritage d'objet. Ensuite, vous ne pouvez pas perdre l'objet hérité dans plusieurs lignes de MyClass.prototype .
DeuxiÚmement, en cas d'héritage multiple, c'est beaucoup plus clair aussi.
TroisiĂšmement, le constructeur de la classe est lisible et ne se perd pas en plusieurs lignes comme le premier point.
QuatriĂšmement, cela permet de regrouper les propriĂ©tĂ©s et les mĂ©thodes au mĂȘme endroit (entre parenthĂšses), ce qui est beaucoup plus clair lorsque vous avez 3, 4, 5... etc classes dans le mĂȘme fichier.
CinquiÚmement, ce modÚle permet de vérifier la copie correcte de certaines propriétés "héritées".

Enfin ( @looeee ), c'est aussi pour les performances. La premiÚre version est plus optimisée lors de l'analyse de fichiers, au lieu d'appels multiples et multiples au prototype.

En tous cas !

Aujourd'hui, on devrait passer Ă  la syntaxe ES6 !

@mrdoob

Cela me paraĂźt bien! Je me concentre actuellement sur WebVR, il faudra donc que ce soit quelqu'un d'autre que moi.
Nous avons juste besoin de quelqu'un pour essayer.

Souhaitez-vous créer une branche es6 ? Ou c'est tout seul ?

La premiÚre version est plus optimisée lors de l'analyse de fichiers, au lieu d'appels multiples et multiples au prototype.

Êtes-vous sĂ»r de cela? Je m'attendrais Ă  ce que Object.Assign soit plus lent, voire rien. Mais dans les deux cas, je doute qu'il y ait suffisamment de surcharge de performance pour s'inquiĂ©ter.

Absolument : https://jsperf.com/inline-prototype-vs-assign-prototype/1

Sous la version chrome 61.0.3163.100 (Build officiel) (64 bits) Les prototypes assignés sont environ 60% plus rapides

Intéressant. Merci d'avoir fait le test.

Ce résultat ne tient pas pour tous les navigateurs cependant. Sur Firefox, ils sont presque identiques ( Object.Assign ~3 % plus rapides), tandis que sur Edge, Object.Assign est ~33 % plus lent .

Mais dans tous les cas, je ne pense toujours pas que cela soit pertinent comme argument pour lequel le style est meilleur - mĂȘme le plus lent dans l'ensemble (proto en ligne dans Chrome) fonctionne toujours Ă > 180 000 opĂ©rations par seconde, et il y a peut-ĂȘtre quelques milliers de ces configurations effectuĂ©es dans le code. On parle donc ici d'une diffĂ©rence de quelques millisecondes, probablement.

Pour moi, le style Object.Assign est plus propre et plus facile Ă  lire, et c'est le principal argument en sa faveur.

Oui, il s'agit de quelques millisecondes par fichier et uniquement lorsque le fichier est analysĂ© la premiĂšre fois par le moteur javascript... mais pour une grande bibliothĂšque comme threejs, le gain pourrait ĂȘtre raisonnablement d'environ 200 millisecondes lors du chargement de la page.
N'oubliez pas la limite de 3scd pour les utilisateurs frontaux qui ne peuvent plus attendre !

J'essaie de créer un projet angulaire avec threejs et on dirait toujours que je pirate chaque partie de threejs.
Tout d'abord, c'est la syntaxe es5 avec TROIS constantes qui doit exister, par exemple, si j'ai besoin d'OrbitalControls.
Nous avons trois typages js, mais il sera plus pratique de les avoir dans le mĂȘme package. Les typages ont OrbitalControls, mais nous ne pouvons pas simplement importer comme import { OrbitalControls } from 'three; .
Webpack a une secousse d'arbre, donc dans le cas d'es6, nous pourrions inclure tout ce dont nous avons besoin dans un projet et ne pas les déplacer vers un projet séparé.
@mrdoob alors pourquoi Typescript est si mauvais ? Il sera compilé en ES dans n'importe quelle version avec des typages de toute façon.
Il est également utilisé dans de nombreux autres frameworks comme React.

@FriOne Je ne sais pas si @mrdoob pense vraiment que Typescript est mauvais, mais je pense qu'il est contre la discussion de Typescript dans ce problĂšme/thread car ce n'est pas le sujet de ce fil. Je pense que les classes ES6 ne fonctionnent pas contre ou pour Typescript. Si vous transformez la base de code en ES6, il est encore plus facile de porter la base de code sur Typescript car sa syntaxe est trĂšs similaire. Oui, je pense que Typescript pourrait activer beaucoup de nouvelles options. Par exemple, cela pourrait aider Ă  "transpiler" un code plus optimisĂ©, cela aide les nouveaux dĂ©veloppeurs Ă  apprendre la bibliothĂšque plus rapidement, peut-ĂȘtre cela ouvre-t-il des portes pour des expĂ©riences futures, par exemple : https://github.com/AssemblyScript/assemblyscript. Je pense qu'il y a beaucoup d'avantages avec Typescript @joejordanbrown a dĂ©crit les avantages en dĂ©tail.

Mais revenons au sujet : je pense que l'adoption des classes ES6 serait un pas en avant et aprÚs cela, nous pourrions discuter de l'affaire Typescript. Alors faisons un pas aprÚs l'autre

@tschoartschi , pense que le tapuscrit peut aider à la migration vers les classes es6 et d'autres refactorisations. Je n'ai pas une telle expérience de migration, il se peut que je me trompe.

@FriOne cela dĂ©pend 😉 bien sĂ»r, Typescript pourrait vous aider car le compilateur pourrait vous indiquer toutes vos erreurs et fautes, mais vous devrez d'abord configurer l'ensemble du tube de construction pour travailler avec Typescript. De plus, vous devez Ă©valuer si Typescript convient ou non. Je pense que c'est bien de convertir d'abord en classes ES6, puis de penser Ă  Typescript.

Salut, nous sommes un groupe de 5 Ă©tudiants de KTH qui cherchent Ă  contribuer Ă  un projet open source pour un cours et aimerions essayer de convertir une partie du projet vers la nouvelle syntaxe ES6.

J'ai porté Three.js sur TypeScript il y a quelque temps (r82) avec quelques exemples, comme preuve de concept.

https://github.com/flyover/three.ts

Les exemples prennent un peu de temps à charger, car la source TypeScript est transpilée à la volée. Ils se chargent aussi vite que les originaux lors de l'utilisation du JavaScript transpilé.

J'aimerais voir three.js portĂ© sur dactylographiĂ©. Je pense que le projet a grandement besoin d'ĂȘtre modernisĂ© s'il veut rĂ©sister Ă  l'Ă©preuve du temps pour les prochaines gĂ©nĂ©rations Web. Un jour, nous le verrons peut-ĂȘtre mĂȘme fonctionner avec AssemblyScript et s'exĂ©cuter dans WASM. Si ce n'est pas trois, alors quelque chose d'autre le fera sĂ»rement.

Ceci est terminé @WestLangley et @mrdoob

@bhouston quelle est la conclusion ici?

@pkieltyka oui, je pense aussi que TypeScript aurait beaucoup de sens pour une bibliothÚque comme Three.js. Outre tous les avantages techniques, cela faciliterait également l'utilisation de la bibliothÚque et aiderait les débutants à explorer l'API. Mais je pense aussi qu'il est important de terminer d'abord tous les trucs ES6, puis d'envisager TypeScript. Je pense que depuis le dernier JavaScript, il n'est pas trop compliqué d'ajouter des types sous forme de TypeScript.

@flyover bien aussi voir une preuve de concept pour une version TypeScript de Three.js. Avez-vous reçu des commentaires des responsables de Three.js ?

Je supporte Ă©galement le tapuscrit pour three.js. le typescript est fondamentalement le meilleur
pratique et JavaScript brut n'est plus.

Le samedi 5 janvier 2019 Ă  04h13, tschoartschi < [email protected] a Ă©crit :

@pkieltyka https://github.com/pkieltyka oui je pense aussi TypeScript
aurait beaucoup de sens pour une bibliothÚque comme Three.js. A cÎté de tous les
pros techniques, cela faciliterait également l'utilisation de la bibliothÚque et aiderait les débutants
pour explorer l'API. Mais je pense aussi qu'il est important de finir toutes les ES6
Remplissez d'abord, puis envisagez TypeScript. Je pense depuis le dernier
JavaScript ce n'est pas trop compliqué d'ajouter des types sous forme de TypeScript.

@flyover https://github.com/flyover sympa aussi voir une preuve de concept pour
une version TypeScript de Three.js. Avez-vous eu des retours des mainteneurs
de Three.js ?

—
Vous recevez ceci parce que vous avez été mentionné.
RĂ©pondez directement Ă  cet e-mail, consultez-le sur GitHub
https://github.com/mrdoob/three.js/issues/11552#issuecomment-451639995 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAj6_bkdND7I0_F4AJcBV0DYLpToUIVhks5vAGykgaJpZM4N9vH8
.

@bhouston Je suis d'accord que TypeScript est une excellente technologie mais je ne le dirais pas comme vous l'avez fait. Je pense que nous devrions toujours rester aussi proches que possible du JavaScript brut et ajouter les fonctionnalitĂ©s TypeScript en plus. Étant donnĂ© que TypeScript suit de trĂšs prĂšs la spĂ©cification JavaScript, TypeScript se lit vraiment comme ES6 avec des types.

Pour une bibliothĂšque comme three.js, TypeScript pourrait ĂȘtre vraiment bĂ©nĂ©fique et pourrait ĂȘtre adoptĂ© progressivement. Nous n'aurions donc pas besoin d'une rĂ©Ă©criture "big bang", surtout pas aprĂšs que tous les refactors ES6 soient terminĂ©s.

Ce serait intéressant d'entendre si la position de @mrdoob sur TypeScript a changé. TypeScript semble devenir la norme "de facto" pour "JavaScript typé" (notez que je mets mes affirmations sous apostrophe car ce ne sont pas des faits concrets)

La premiÚre étape devrait consister à adopter les fonctionnalités ES6, en particulier les classes, la fonction fléchée, « let » et « const ».

Une fois que nous avons fait cela, nous pouvons discuter correctement de la prise en charge du dactylographie car, comme le souligne @roomle-build, il est facile d'ajouter progressivement des fonctionnalités de dactylographie au-dessus du code ES6 si nous le décidons.

Faire les deux Ă  la fois me semble compliquer les choses.

C'est bien d'entendre que TypeScript pourrait ĂȘtre une option Ă  un moment donnĂ© dans le futur :-) peut-ĂȘtre pourrions-nous rĂ©utiliser une partie du travail effectuĂ© par @flyover

Mais je suis totalement d'accord avec @looeee pour finir d'abord tous les trucs ES6 et ensuite me concentrer sur les prochaines Ă©tapes

finir tous les trucs ES6

Je serais heureux si nous pouvions au moins le dĂ©marrer 😅

Une bonne étape intermédiaire vers TypeScript consisterait à ajouter des fichiers de type à cÎté de chaque fichier JavaScript. Il y aurait donc les deux :

Vector3.js
Vecteur3.d.ts

Cela nous donne tous les avantages de TypeScript en tant que fichiers annexes.

À l'heure actuelle, il existe un fichier @types/three mais il est obsolĂšte et maintenu sĂ©parĂ©ment - il sera donc toujours Ă  court de donnĂ©es.

Le principal concurrent de Three.JS est Babylong et il est entiÚrement dactylographié et je pense qu'il en profite.

Mais tuer @types/three et l'intégrer en tant que fichiers de définition de type side-cars dans Three proprement dit serait un excellent premier pas.

Nous devons également intégrer tous les exemples dans /src avec un certain type de tree shaking.

À l'heure actuelle, la structure de code pour Three.JS est tellement 2014 et c'est juste une douleur à travailler.

Tous les exemples ?

Exemples/js

Le lundi 7 janvier 2019 Ă  10 h 25, Dusan Bosnjak < [email protected] a Ă©crit :

Tous les exemples ?

—
Vous recevez ceci parce que vous avez été mentionné.
RĂ©pondez directement Ă  cet e-mail, consultez-le sur GitHub
https://github.com/mrdoob/three.js/issues/11552#issuecomment-451970482 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAj6_Q3Kakb5Qn2DqGbMVvLkW_28cOyaks5vA2b5gaJpZM4N9vH8
.

@bhouston

Une bonne étape intermédiaire vers TypeScript consisterait à ajouter des fichiers de type à cÎté de chaque fichier JavaScript. Il y aurait donc les deux :

Vector3.js
Vecteur3.d.ts

Les fichiers .d.ts agiraient-ils comme des fichiers .h en c ?

Les fichiers .d.ts agiraient-ils comme des fichiers .h en c ?

C'est une trÚs bonne analogie. Quelqu'un d'intéressant a déjà fait la plupart de cela ici: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/three Ainsi, il suffirait de s'approprier ces fichiers de type et de les intégrer dans Three.js. Si vous le souhaitez, nous pouvons créer un PR qui l'intÚgre dans Three.js et le divise proprement.

Pour montrer à quel point Typescript est populaire, regardez combien de @Types/three sont téléchargés par semaine :

https://www.npmjs.com/package/@types/three - 63 000 téléchargements par semaine.

Impressionant!

Si vous le souhaitez, nous pouvons créer un PR qui l'intÚgre dans Three.js et le divise proprement.

Ça me tente bien 👍

Est-il possible d'exécuter une vérification en ligne de commande, similaire à eslint, en s'assurant que les fichiers de type et les fichiers source .js sont alignés ? Si nous nous approprions les fichiers d.ts , il serait fortement préférable d'avoir un moyen de vérifier réguliÚrement qu'ils correspondent.

Pour montrer à quel point Typescript est populaire, regardez combien de @Types/three sont téléchargés par semaine :

https://www.npmjs.com/package/@types/three - 63 000 téléchargements par semaine.

J'attribuerais cela davantage à la popularité de Visual Studio Code, car cela se produit automatiquement lorsque vous utilisez Visual Studio Code, via leur fonction d'acquisition automatique de type.
Cela dit, il ne peut ĂȘtre ignorĂ©.

@flyover @bunnybones1 @mrdoob @looeee @donmccurdy @bhouston @roomle-build @pkieltyka @FriOne @joejordanbrown puisque vous semblez tous intĂ©ressĂ©s par TypeScript, je voulais noter que j'ai crĂ©Ă© un nouveau problĂšme concernant TypeScript. Je pense qu'il est logique de dĂ©placer toutes les discussions TS lĂ -bas. Si vous ĂȘtes intĂ©ressĂ©, vous pouvez le trouver ici : https://github.com/mrdoob/three.js/issues/15545

Je suis prĂȘt Ă  consacrer du temps au portage vers les classes ES6. Je pense que ce sera une bonne solution de pont pour un jour prendre en charge Typescript.

La premiÚre étape consiste à convertir certains des modules complémentaires en ES6.

https://github.com/mrdoob/three.js/tree/dev/examples/jsm

Les ContrÎleurs, les Chargeurs et les Exportateurs sont de bons candidats. N'hésitez pas à aider !

@mrdoob juste pour confirmer, vous voulez dire les convertir en modules ES mais pas encore utiliser d'autres fonctionnalités ES6, n'est-ce pas ?

Je suppose que le processus de faire cette conversion est:

  1. Utilisez le script modularize.js pour convertir le fichier d'origine en module ES.
  2. Nettoyez les problÚmes si nécessaire.
  3. À un moment donnĂ© (cette version ou dans un futur proche), nous commencerons Ă  utiliser rollup-examples.config.js pour convertir les modules ES en modules UMD, auquel cas la version dans examples/js n'est plus maintenue par main.
  4. Une fois que cela est stable, nous pouvons envisager d'autres changements comme l'introduction de fonctionnalités ES6.

@mrdoob juste pour confirmer, vous voulez dire les convertir en modules ES mais pas encore utiliser d'autres fonctionnalités ES6, n'est-ce pas ?

Ouais désolé. J'aurais dû préciser.

Moi et @bhouston avons créé le PR promis qui fournit les fichiers *.d.ts pour la plupart du projet Three.JS. https://github.com/mrdoob/three.js/pull/15597

Je ne peux tout simplement pas attendre les classes ES6 et les définitions Typescript. Chaque fois que je travaille avec three.js, je dois copier-coller des centaines de lignes de code pour réimplémenter une fonction qui se trouve dans une portée inaccessible. Ce n'est vraiment pas une façon élégante de travailler si vous devez optimiser vos scÚnes. Cela amÚnerait le flux de travail à un nouveau niveau pour pouvoir enfin étendre et remplacer les fonctions.
Veuillez donc rendre les fonctions de classe au moins "protĂ©gĂ©es" et accessibles sans exception đŸ€—

Chaque fois que je travaille avec three.js, je dois copier-coller des centaines de lignes de code pour rĂ©implĂ©menter une fonction qui se trouve dans une portĂ©e inaccessible. ... Veuillez donc rendre les fonctions de classe au moins „protĂ©gĂ©es“ et accessibles sans exception.

@dionysiusmarquis Je ne suis pas sûr de comprendre ce que vous voulez dire ici ... les typages TS existants ont des fonctions que vous souhaitez utiliser incorrectement marquées comme privées? Ou quelque chose à propos des définitions de classe de style prototype actuelles rend l'utilisation difficile dans TS ? Pourriez-vous partager un exemple ?

Chaque fois que je travaille avec three.js, je dois copier-coller des centaines de lignes de code pour rĂ©implĂ©menter une fonction qui se trouve dans une portĂ©e inaccessible. ... Veuillez donc rendre les fonctions de classe au moins „protĂ©gĂ©es“ et accessibles sans exception.

@dionysiusmarquis Je ne suis pas sûr de comprendre ce que vous voulez dire ici ... les typages TS existants ont des fonctions que vous souhaitez utiliser incorrectement marquées comme privées? Ou quelque chose à propos des définitions de classe de style prototype actuelles rend l'utilisation difficile dans TS ? Pourriez-vous partager un exemple ?

Je voulais juste implémenter une carte d'ombre spécifique pour un scénario spécifique. Il aurait été utile de pouvoir remplacer getDepthMaterial par exemple. Pour le moment, j'injecte mon propre WebGLShadowMap dans le processus de construction avec une version copier/coller incluant les modifications souhaitées.
Ce serait tellement bien si chaque classe three.js exposait autant que possible. Avec le tapuscrit, vous pouvez facilement marquer les fonctions comme private ou protected pour décrire le but recherché. Mon ES6 Class/Typescript ShadowMap par exemple ressemble à ceci :

interface MaterialCache {
  [uuid: string]: {[uuid: string]: MeshDepthMaterial}
}

class ShadowMap {
  public enabled: boolean = false
  public autoUpdate: boolean = true
  public needsUpdate: boolean = false
  public type: ShadowMapType

  


  protected depthMaterials: MeshDepthMaterial[]
  protected materialCache: MaterialCache

  constructor (renderer: WebGLRenderer, objects: WebGLObjects, maxTextureSize: any) {
    

  }

  protected getDepthMaterial (object: Object3D, material: Material) {
    

  }
}

export { ShadowMap as WebGLShadowMap }

On se sent comme Ă  la maison si vous ĂȘtes autorisĂ© Ă  modifier les classes "de bas niveau"

J'ai une question dans le contexte des cours. Comment transférerions-nous des méthodes comme Vector3.unproject dans la syntaxe de la classe ? La méthode utilise en fait une fermeture afin de créer une nouvelle portée. Il s'agit d'un mécanisme important qui maintient le nombre de créations d'objets aussi bas que possible.

Avons-nous besoin Object.assign dans ces cas ?
@Mugen87

Vous pouvez faire des fermetures avec les classes maintenant. Il n'est tout simplement pas Ă©vident de naviguer dans ce sucre syntaxique. Voir ma rĂ©ponse sur StackOverflow : https://stackoverflow.com/questions/39297258/iife-in-es6-class-literal/56077521#56077521 (je dois ĂȘtre humble et admettre que je ne comprends pas bien comment/pourquoi cela fonctionne .)

Désolé, mais ce code ressemble à un anti-modÚle et nous ne devrions pas l'adapter dans le projet. Il existe des solutions appropriées pour gérer les variables dans la portée du module. Je suggÚre d'aller dans cette voie.

@ Mugen87 oui, je pense aussi que nous devrions faire bon usage de module-scope. Cela aiderait également pour des choses comme le secouage des arbres. Cela a déjà été discuté dans de nombreux autres problÚmes comme celui-ci : https://github.com/mrdoob/three.js/issues/6241#issuecomment -398703521

Désolé, mais ce code ressemble à un anti-modÚle et nous ne devrions pas l'adapter dans le projet. Il existe des solutions appropriées pour gérer les variables dans la portée du module. Je suggÚre d'aller dans cette voie.

Aucun problÚme. Je viens d'évoquer la possibilité. Si vous avez une solution meilleure/plus propre en cours, je suis impatient de la voir en action. Le projet Three.js (utilisation, source, discussions, etc.) a été ma principale source de connaissances JS, donc l'introduction de nouveaux et meilleurs modÚles de programmation dans Three.js sera probablement bénéfique pour moi et mes projets aussi. Rien à regretter. ;-)

@ Mugen87 Pouvez-vous expliquer un peu pourquoi vous considĂ©rez les class-IIFE comme un anti-modĂšle, ne serait-ce que pour que je puisse apprendre et comprendre un peu plus? Je comprends que les variables de portĂ©e des modules sont inhĂ©rentes, mais ce n'est pas diffĂ©rent de la façon dont le noyau Ă©tait construit auparavant. Et avec autant de fonctions utilisant des variables de cache, il sera vraiment important de s'assurer qu'aucune des fonctions n'entre en collision ou n'utilise de variables en mĂȘme temps - la portĂ©e de la fonction facilite la gestion et la maintenance, c'est pourquoi je ne vois pas comme un anti-modĂšle (au moins par rapport au lancement de toutes les variables de cache dans la portĂ©e du module).

Pouvez-vous expliquer un peu pourquoi vous considérez les classes IIFE comme un anti-modÚle

Je n'utiliserais pas une approche susceptible d'empĂȘcher le tremblement des arbres comme mentionnĂ© ici : https://github.com/mrdoob/three.js/pull/14695. De plus, je pense que l'ensemble du modĂšle ressemble Ă  un hack. L'utilisation d'approches moins "fantaisistes" fonctionne gĂ©nĂ©ralement mieux. Éviter les fermetures inutiles devrait Ă©galement amĂ©liorer les performances d'exĂ©cution du code en gĂ©nĂ©ral (je ne peux pas le prouver avec une rĂ©fĂ©rence, mais je l'ai entendu lors d'une confĂ©rence il y a quelque temps).

Et avec autant de fonctions utilisant des variables de cache, il sera vraiment important de s'assurer qu'aucune des fonctions n'entre en collision ou n'utilise de variables en mĂȘme temps.

Les IIFE sont principalement utilisĂ©s dans les cours de mathĂ©matiques. Étant donnĂ© que nous avons une bonne couverture de test lĂ -bas ( @gero3 a fait un excellent travail ces derniers temps en ajoutant plus de tests unitaires), il devrait ĂȘtre plus facile de rendre leur suppression robuste.

Il est bon de supprimer les IIFE. Je pense que j'en suis responsable en 2013. C'était pour se débarrasser d'un modÚle variable statique qui était difficile à maintenir. Cela a été fait dans ce PR:

https://github.com/mrdoob/three.js/pull/2941

https://github.com/mrdoob/three.js/issues/2936

Et discuté encore plus tÎt ici:

https://github.com/mrdoob/three.js/pull/2920#issuecomment -12217793

Fait intéressant, lorsque nous les avons insérés, il n'y avait pas de différence de performance de code.

Je suppose que le processus de faire cette conversion est:

  1. Utilisez le script modularize.js pour convertir le fichier d'origine en module ES.
  2. Nettoyez les problÚmes si nécessaire.
  3. À un moment donnĂ© (cette version ou dans un futur proche), nous commencerons Ă  utiliser rollup-examples.config.js pour convertir les modules ES en modules UMD, auquel cas la version dans examples/js n'est plus maintenue par main.
  4. Une fois que cela est stable, nous pouvons envisager d'autres changements comme l'introduction de fonctionnalités ES6.

Hey. peut-ĂȘtre l'avez-vous manquĂ©, mais quelles Ă©taient nos Ă©tapes progressives vers les cours ?

  1. [x] Utilisez le script modularize.js pour convertir le fichier d'origine en module ES.
  2. [x] Nettoyez les problÚmes si nécessaire.
  3. [ ] À un moment donnĂ© (cette version ou dans un avenir proche), nous commencerons Ă  utiliser rollup-examples.config.js pour convertir les modules ES en modules UMD, auquel cas la version dans examples/js n'est plus maintenue par main.
  4. [ ] Une fois que cela est stable, nous pouvons envisager d'autres changements comme l'introduction de fonctionnalités ES6.

Dans les étapes ci-dessus, nous avons essentiellement terminé les étapes (1) et (2).

Étape (3) nous ne procĂ©dons plus de cette façon, mais nous dĂ©conseillerons et supprimerons le dossier examples/js Ă  un moment donnĂ© (voir https://github.com/mrdoob/three.js/pull/18749) .

Je pense que cela signifie que l'Ă©tape (4), l'introduction des classes ES6 dans examples/jsm ne peut ĂȘtre effectuĂ©e (pour l'instant) que sur les trĂšs rares exemples qui ne sont pas gĂ©nĂ©rĂ©s Ă  partir de versions source examples/js . Une fois que examples/js est supprimĂ©, nous pouvons faire le reste.

^ Mais je lis peut-ĂȘtre trop entre les lignes ici, peut-ĂȘtre que @Mugen87 ou @mrdoob peuvent confirmer ?

IMO, le projet devrait se concentrer sur la dĂ©prĂ©ciation et la suppression de examples/js afin d'obtenir une base de code uniquement pour les modules. À l'Ă©tape suivante, je recommanderais de passer Ă  la migration de classe. En commençant par les exemples, puis en migrant le noyau.

parfait. Je vous remercie. va regarder de plus prÚs ces façons

Republié à partir d'un numéro clos.
Salut,

Je voulais crĂ©er ce numĂ©ro pour essayer de dĂ©mĂȘler les pensĂ©es de tout le monde sur la façon dont nous aimerions avancer avec la migration de classe.

Mon petit résumé de ce que j'ai rencontré jusqu'à présent :

  • Nous devrions dĂ©prĂ©cier le dossier des exemples avant de faire quoi que ce soit d'autre
  • Il y a des parties de src/ qui ne sont Ă©tendues par aucun des exemples qui pourraient ĂȘtre convertis
  • Avec quelques modifications apportĂ©es au script modularize.js, nous pourrions commencer avec examples/js/ qui gĂ©nĂšre les scripts examples/jsm correspondants.

Ai-je raté quelque chose ?

Nous devrions déprécier le dossier des exemples avant de faire quoi que ce soit d'autre

Je ne sais pas qui est responsable de la prochaine Ă©tape spĂ©cifique du dossier examples/js . À moins que nous puissions articuler ce plan, je prĂ©fĂ©rerais que cela ne bloque pas la conversion des choses en classes ES. Pour cette raison, je suis quelque peu en dĂ©saccord avec https://github.com/mrdoob/three.js/issues/11552#issuecomment -592768708. 🙂

suite à cela, il semble que nous attendons juste qu'une date soit fixée

De plus, dans le cadre d'une petite rĂ©vision que j'ai faite, j'ai trouvĂ© ce commentaire sur la façon dont d'autres fonctionnalitĂ©s ES2015 pourraient ĂȘtre introduites via le processus de construction de cumul actuel. Il y a mĂȘme un exemple donnĂ© .

edit : voici l' essentiel d'un autre exemple rapide

@DefinitelyMaybe J'ai un peu de temps et j'aimerais aider. Puis-je emporter certains articles de la liste dependencies.json ?

@DefinitelyMaybe Quelle est la meilleure façon de gĂ©rer l'hĂ©ritage d'un ancĂȘtre profond comme Object3D ? Par exemple, j'ai rencontrĂ© une rupture en convertissant src/audio/AudioListener.js :

[ROLLUP] bundles src/Three.js → build/three.js...
[ROLLUP] (!) Error when using sourcemap for reporting an error: Can't resolve original location of error.
[ROLLUP] src/audio/AudioListener.js: (137:1)
[ROLLUP] [!] Error: 'return' outside of function
[ROLLUP] src/audio/AudioListener.js (137:1)
[ROLLUP] 135:   };
[ROLLUP] 136: 
[ROLLUP] 137:   return AudioListener;
[ROLLUP]        ^
[ROLLUP] 138: }(Object3D));
[ROLLUP] Error: 'return' outside of function

nous allions faire une note en haut du fichier sur tous les problĂšmes que nous rencontrions, si je me souviens bien.

J'ai mal compris ce qui se passait avec AudioListener... AprÚs quelques débogages, je pense qu'il y a un problÚme de correspondance dans la transformation bubleCleanup . Voir https://github.com/mrdoob/three.js/pull/19934#issuecomment -667411997 pour plus d'informations. J'ai rencontré cela avec quelques classes différentes, nous devrons donc probablement le trier avant d'aller beaucoup plus loin.

ce sera le cas pour certains fichiers mais pas pour tous. Nous anticipions un tel problĂšme.

Pour ceux qui suivent, veuillez lire rapidement la discussion ici .

En attendant, dibs sur src/loaders !

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Horray picture Horray  Â·  3Commentaires

ghost picture ghost  Â·  3Commentaires

jlaquinte picture jlaquinte  Â·  3Commentaires

boyravikumar picture boyravikumar  Â·  3Commentaires

seep picture seep  Â·  3Commentaires