web-dev-qa-db-fra.com

ES6: module d'importation depuis l'URL

Est-il possible d'importer un module javascript depuis une URL externe dans ES6?

J'ai essayé (en utilisant babel-node):

import mymodule from 'http://...mysite.../myscript.js';
// Error: Cannot find module 'http://...mysite.../myscript.js'
32
madox2

Mise à jour 2018: la spécification du chargeur de module fait maintenant partie de la spécification ES - ce que vous décrivez est autorisé et possible avec <script type="module"> dans les navigateurs et avec un --loader avec Node.js ainsi que Deno si vous aimez ça.


La spécification du chargeur de module et la syntaxe d'importation/exportation sont séparées. Il s’agit donc d’une propriété du chargeur de modules (qui ne fait pas partie de la spécification ES). Si vous utilisez un chargeur de module prenant en charge des plugins tels que SystemJS .

22
Benjamin Gruenbaum

TL; DR:

Pour l'instant, no .

Longue réponse:

Il existe deux spécifications différentes: l'ES6 définit la syntaxe d'exportation/importation. Et il y a le Loader Spec qui définit réellement le mode de chargement de ces modules.

Pour les développeurs, l’important, c’est:

JavaScript Loader permet aux environnements hôtes, tels que Node.js et les navigateurs, d’extraire et de charger des modules à la demande. Il fournit un pipeline à connecter pour permettre aux solutions d’emballage frontales telles que Browserify, WebPack et jspm d’être intégrées au processus de chargement.

Cette division fournit un format unique que les développeurs peuvent utiliser dans tous les environnements JavaScript et un mécanisme de chargement distinct pour chaque environnement. Par exemple, un Node Loader chargerait ses modules à partir du système de fichiers, en utilisant son propre algorithme de recherche de module), tandis qu'un Browser Loader irait chercher des modules et utiliserait les formats de package fournis par le navigateur.

(...)

L’objectif principal est d’harmoniser le plus possible ce processus entre les environnements Node) et le navigateur. Par exemple, si un programme JavaScript souhaite traduire .coffee fichiers en JavaScript à la volée, le chargeur définit un crochet de "traduction" pouvant être utilisé. Cela permet aux programmes de participer au processus de chargement, même si certains détails (en particulier le processus d'obtention d'un module particulier à partir de son stockage défini par l'hôte) seront différents d'un environnement à l'autre.

Nous dépendons donc de l'environnement de l'hôte (nœud, navigateur, babel, etc.) pour résoudre/charger les modules pour nous et fournir des points d'ancrage au processus.

4
madcampos

Vous pouvez aussi utiliser scriptjs qui dans mon cas nécessite moins de configs.

var scriptjs = require('scriptjs');

scriptjs('https://api.mapbox.com/mapbox.js/v3.0.1/mapbox.standalone.js', function() {
    L.mapbox.accessToken = 'MyToken';
});
3
BaptWaels