2017-06-04 2 views
2

J'ai une fonction qui est définie dans un module ES6 (sender.js) comme suit:Comment accéder aux fonctions définies dans le module ES6 dans la console JavaScript d'un navigateur?

function send() { 
    // do stuff 
} 
export {send}; 

Ce module est l'utilisé dans le principal fichier JavaScript de l'application app.js comme suit:

import {send} from "./sender" 

Le send fonction est disponible dans le fichier app.js, cependant ce n'est pas dans la console Javascript de Firefox:

> send 
ReferenceError: send is not defined 

Comment puis-je importer la fonction send dans la console JavaScript?

+0

ES 6 modules ne sont pas pris en charge par un navigateur, donc je suppose que vous utilisez Babel, n'est-ce pas? –

+0

oui, j'utilise Babel – Chedy2149

+1

Utilisez-vous un bundler, comme webpack, Browserify ou Rollup? –

Répondre

5

Vous pouvez définir la fonction spécifique comme globale en l'affectant à l'objet global - dans les navigateurs window.

import {send} from "./sender"; 
window.send = send; 

Notez que bien qu'il puisse être utile pour le débogage, vous ne devriez pas utiliser que dans le code de production - voir Why are global variables considered bad practice?

+0

Ce que je me demande est, puisque 'send' est déclaré dans un fichier, ne pas être enveloppé dans une fonction, ne devrait-il pas être un global? Est-ce spécifique aux fichiers chargés via 'import'? –

+0

@ IonicăBizău Je pense que cela dépend de quel bundler l'OP utilise. Ce comportement me semble logique, car il n'y a pas besoin d'une application pour exposer les fonctions. Par exemple, [Rollup respecte le code en question dans un fichier vide] (https://goo.gl/PM4zOq). –

+1

@ IonicăBizău Oui, c'est spécifique à eux. Les fichiers chargés avec l'importation sont des modules et les modules ont leurs propres étendues. C'est l'objectif des modules - être modulaire et ne pas polluer la portée globale. – estus