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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Les modules ES6 ?


Sujet :

JavaScript

  1. #1
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut Les modules ES6 ?
    Salut,

    J'ai voulu essayer les fameux modules ES6 (avec chrome 64) mais ce fut sans succès...

    Pourtant j'ai cru comprendre que chrome gérait les modules ES depuis la version 61...

    Mais après quelques tests je me demande s'il ne faut pas utiliser un serveur ? C'est-à-dire que cela ne fonctionne pas en local ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Comment as-tu réalisé l'import de ton source dans Chrome ?

    As-tu bien utilisé le type module de cette manière <script type="module" src="module.js"></script> ?
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Oui j'ai essayé de reproduire le premier exemple du site : https://jakearchibald.com/2017/es-modules-in-browsers comme ceci :

    Dans un fichier html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE html>
    <html>
     
    <head>
        <meta charset="UTF-8">
        <title>ECMAScript modules in browsers</title>
        <link rel="stylesheet" href="./../../style.css">
        <script type="module" src="index.js"></script>
    </head>
     
    <body>
    </body>
     
    </html>

    Le fichier index.js :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import {addTextToBody} from './utils.js';
     
    addTextToBody('Modules are pretty cool.');

    Le fichier utils.js :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    export function addTextToBody(text) {
        const div = document.createElement('div');
        div.textContent = text;
        document.body.appendChild(div);
    }

    Et alors je lance chrome (en enlevant la sécurité) et il me dit ceci :

    Failed to load module script: The server responded with a non-JavaScript MIME type of "". Strict MIME type checking is enforced for module scripts per HTML spec.

    index.js:1

    J'ai vu en faisant une recherche que je n'étais pas le seul à avoir ce problème...

  4. #4
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Ah j'ai essayé avec l'IDE Cloud9 et ça marche !

    Est-ce parce qu'il faut un serveur ?

  5. #5
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    J'ai utilisé ton code tel quel et ça marche très bien.

    J'ai simplement ajouté http-server à un package.json :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {
      "name": "ES6-browser",
      "scripts": {
        "start": "http-server -c-1"
      },
      "devDependencies": {
        "http-server": "^0.11.1"
      }
    }
    Mon chrome est en version 65.

    Quel serveur web utilises-tu ?

    Et alors je lance chrome (en enlevant la sécurité)
    Quelle sécurité ? Pourquoi ?
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  6. #6
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Est-ce parce qu'il faut un serveur ?
    Pour servir un site web c'est mieux !
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Ben justement au début je n'utilisais pas de serveur d'où ma question : "Mais après quelques tests je me demande si il ne faut pas utiliser un serveur ? C'est-à-dire que cela ne fonctionne pas en local ?"


    Je croyais qu'on pouvait utiliser les modules ES en local (tous les fichiers dans un répertoire du disque dur) sans serveur comme les codes classiques quoi mais apparemment ce n'est pas possible, c'est ça ?

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Exemple utilisant un module et des Class avec des propriétés "privées" (module) et protégées (get, set).


    Nota bene pour les utilisateurs de Firefox

    J'ai adopté les modules ES2015 partout, c'est tellement pratique, mais Firefox est en retard par rapport à Chrome et Edge, voir Can I use module : https://caniuse.com/#search=module.
    La sortie de Firefox 60 (normal) est prévue pour le 2018-05-09 (https://wiki.mozilla.org/RapidRelease/Calendar)

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci.
    C'est un exemple instructif.

    Je vois que tu utilises deux class, c'est intéressant...

    Tu utilises les WeakMap pour avoir des variables privées (kNom, kPrix) ?

    Mais les autres (kNomType, kPrixType,...) sont aussi privées en quelque sorte puisqu'elles sont dans un module et tout ce qui n'est pas exporté n'est pas accessible depuis l'extérieur du module, non ?

    ---> Là ça marche car tes fichiers sont dans un serveur mais en local je suppose que cela ne fonctionnerait pas ?


    PS : J'ai aussi regardé cet exemple : https://danielhagnoul.developpez.com/Site/QR20180329-1/

  10. #10
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Je croyais qu'on pouvait utiliser les modules ES en local (tous les fichiers dans un répertoire du disque dur) sans serveur comme les codes classiques quoi mais apparemment ce n'est pas possible, c'est ça ?
    Apparemment si j'en crois le message d'erreur ce n'est pas possible.

    Pour le coup de la security tu as désactivé CORS c'est ça ? C'est mal.

    En fait je ne comprends pas pourquoi tu t'acharnes avoir lancer une appli web sans serveur web pour la servir, ça n'a pas de sens.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  11. #11
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Les imports de modules et toute autre requête ne fonctionnent pas avec des fichiers locaux (file://), autrement n'importe quel site pourrait lire tes fichiers, ce qui serait assez problématique question sécurité
    One Web to rule them all

  12. #12
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    En fait je ne comprends pas pourquoi tu t'acharnes avoir lancer une appli web sans serveur web pour la servir, ça n'a pas de sens.
    Ben l'application il faut bien la mettre au point avant de la servir, non ? Et alors je pensais qu'on pouvait utiliser les module ES durant la phase de développement car pour moi ces modules ben ça permet de travailler sous forme de module justement et on en connait l’intérêt (c'est plus facile de diviser l'application en plusieurs morceaux réutilisables).

    Citation Envoyé par SylvainPV Voir le message
    Les imports de modules et toute autre requête ne fonctionnent pas avec des fichiers locaux (file://), autrement n'importe quel site pourrait lire tes fichiers, ce qui serait assez problématique question sécurité :aie
    Mais pour ça il faudrait qu'il connaisse le nom des fichiers et leur chemin, non ?

    - Sinon ben je pensais que c'était comme avec node et les require, ça marche en local, non ? Est-ce parce que node peut lire dans le disque dur ? Mais c'est vrai qu'on doit passer par des bundler (j'avais tester Browserify) pour que ça marche dans un navigateur...

    Donc c'est sûr pas moyen de travailler avec les modules en local ? Ah ben voilà encore une raison qui fait qu'on peut encore avoir besoin de rollupjs ???

    Du coup comment on fait pour tester durant la phase de développement de l'application (utilisant des modules ES) ? Il faut bien tester avant de mettre ça dans un serveur...

    ---> Doit-on utiliser un serveur local ?


    PS : Ben Daniel comment il a fait ? (Ceci dit c'est vrai que j'ai pu aussi tester avec l'ide cloud9...).

  13. #13
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Ben l'application il faut bien la mettre au point avant de la servir, non ?
    Tu n'as jamais utilisé de serveur de développement local ? C'est la base, tous les frameworks en proposent un par défaut maintenant, et ils ont plein de fonctionnalités sympas comme le hot reload. Si tu n'utilises pas de framework, je te suggère d'essayer Parcel, dont la doc française vient d'être publiée (votre humble serviteur en est le relecteur) : https://parceljs.org/ ; c'est le bundler le plus simple que je connaisse pour les débutants. Et si tu veux juste un serveur local, sans aucune autre fonctionnalité, alors essaie http-server (voir le post de Marco plus haut) ou https://www.npmjs.com/package/serve ; ce sont deux serveurs locaux basés sur Node.js, très simples d'utilisation là aussi.

    Citation Envoyé par Beginner. Voir le message
    Mais pour ça il faudrait qu'il connaisse le nom des fichiers et leur chemin, non ?
    Ça serait naïf de penser que c'est une sécurité suffisante. Comme laisser sa porte ouverte parce qu'il faudrait que les cambrioleurs connaissent l'adresse.

    Citation Envoyé par Beginner. Voir le message
    - Sinon ben je pensais que c'était comme avec node et les require, ça marche en local, non ? Est-ce parce que node peut lire dans le disque dur ?
    Node est un exécutable comme toute autre appli, pas du tout les mêmes contraintes de sécurité que l'exécution d'un code distant JavaScript dans un navigateur.

    Citation Envoyé par Beginner. Voir le message
    Mais c'est vrai qu'on doit passer par des bundler (j'avais tester Browserify) pour que ça marche dans un navigateur... Donc c'est sûr pas moyen de travailler avec les modules en local ? Ah ben voilà encore une raison qui fait qu'on peut encore avoir besoin de rollupjs ???
    Mais si, les modules ES6 fonctionnent très bien en local, à condition de passer par un serveur local et pas de lire directement dans le système de fichiers.
    One Web to rule them all

  14. #14
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci.

    Oui j'avais entendu parlé de Parcel mais j'avais mal compris car j'avais cru comprendre qu'il ne gérait pas les modules ES mais apparent c'est le cas ??? Il gère même les modules de Node apparemment ?

    J'ai cru comprendre qu'il était simple d'utilisation car il ne nécessite pas de configuration mais on peut regretter le tree shaking de Rollup... Mais peut-être qu'il sera implémenté dans Parcel : https://github.com/parcel-bundler/parcel/issues/392 ?

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par SylvainPV Voir le message
    Les imports de modules et toute autre requête ne fonctionnent pas avec des fichiers locaux (file://), autrement n'importe quel site pourrait lire tes fichiers, ce qui serait assez problématique question sécurité
    Pas tout-à-fait: le browser pourrait très bien limiter l'utilisation de file:// aux html ou modules chargés localement.

  16. #16
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Comment ça, aux modules chargés localement ? Le browser limiterait l'import de modules aux modules déjà chargés ?
    Quant au HTML, le navigateur ne se base pas sur l'extension pour détecter le type d'un fichier mais sur le mime type, ce qui impliquerait d'accéder en lecture à tous les fichiers pour obtenir leur type. Et même si on trouvait un moyen de restreindre aux fichiers HTML, cela outrepasse déjà largement les règles de sécurité élémentaires.
    One Web to rule them all

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Cette discussion est théorique est sans vraiment d'importance, mais pas d'accord:
    le browser pourrait très bien admettre le file protocol à partir des html qui ont été chargés par ce même protocol
    Cela ne pose aucun problème de sécurité
    En fait c'est un peu du même origine checking où "file://" serait considéré comme une origine

  18. #18
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Cela voudrait dire que si tu ouvres un fichier HTML en local avec file://, alors il serait capable de lire tout ton disque dur et d'envoyer le tout à un serveur distant ? C'est un léger problème de sécurité pour moi quand même
    Aussi file:// est un protocole, pas une origine, donc la comparaison ne tient pas. Sinon n'importe quel site pourrait aller requêter n'importe quel autre sous prétexte qu'ils sont tous les deux en http://
    One Web to rule them all

Discussions similaires

  1. Les modules ES6 / Veille technologique
    Par Paleo dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 30/12/2015, 16h29
  2. Réponses: 9
    Dernier message: 06/06/2006, 22h05
  3. Decompression d'un fichier sans utiliser les modules du CPAN
    Par choubiroute dans le forum Modules
    Réponses: 6
    Dernier message: 10/03/2006, 14h20
  4. Démarche pour installer les modules sans executable...
    Par Olivier_ dans le forum Déploiement/Installation
    Réponses: 7
    Dernier message: 21/10/2005, 17h50
  5. lister tout les modules installer de perl
    Par black_code dans le forum Modules
    Réponses: 6
    Dernier message: 05/08/2005, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo