Cómo usar módulos ES6 desde la consola de herramientas de desarrollo

5 minutos de lectura

Según tengo entendido, si creo un módulo ES6, solo puedo importarlo desde un código que es en sí mismo un módulo. Esto significa que el código que no es de módulo, es decir, Javascript en línea, o la consola de herramientas de desarrollo de Chrome nunca puede acceder al código que está en un módulo.

¿Es eso cierto? ¿Hay alguna forma de evitar esto porque parece una limitación bastante extrema?

Puedes usar importación dinámica dentro de la consola de Chrome.

import('path/to/module.js').then(m => module = m)

// [doSomething] is an exported function from [module.js].
module.doSomething()

  • ¿Qué ruta debe usarse en el caso de un entorno de paquete web con un node_modules ¿directorio? No puedo hacer que ninguna combinación de cosas funcione

    – T3db0t

    14 de enero de 2020 a las 19:55

  • ¿Qué estás tratando de importar? ¿Un módulo ES6 o un script de salida creado por webpack? Si es este último, que no es un módulo ES6, no creo que funcione.

    – Familiares

    18 de enero de 2020 a las 2:04

  • Módulo ES6. En este caso, solo tratando de probar ideas con immutableque se instala localmente en node_modules. Simplemente no sé qué camino usar en el import función

    – T3db0t

    20 de enero de 2020 a las 16:28

  • Como ligera mejora, en los navegadores modernos puedes hacer const m = await import('path/to/module.js');

    – John

    5 de noviembre de 2020 a las 1:27

  • Con Skypack, hay un CDN conveniente para que las personas puedan hacer esto fácilmente, omitiendo la molestia de descargar npm.

    – caquio

    7 mayo 2022 a las 16:05


Avatar de usuario de Carl
Carlos

Puede registrar la función o variable en el espacio de nombres global con una línea como window.myFunction = myFunction o window.myVariable = myVariable. Puedes hacer esto en el módulo donde myFunction o myVariable están declarados o hacerlo en un módulo separado donde han sido importados.

Una vez que hayas hecho esto, podrás usar myFunction y myVariable desde la consola de Chrome DevTools.

Por ejemplo:

import myModule from '/path/to/module.js';
window.myModule = myModule;

// in the console:
myModule.foo();

(Dé crédito a @Evert por proporcionar esta solución en un comentario, aunque de una manera bastante indirecta que me llevó un tiempo descubrir).

  • Para ser claro, escriba el import (y window.myModule) declaraciones en su archivo HTML. Navega a esa página. Luego abra la consola y use myModule.

    – Ricardo

    5 de febrero de 2020 a las 15:28

  • Esto es amor. Gracias por enviarlo.

    – Rico Rodríguez Collins

    16 oct 2020 a las 17:46

  • no pude usar window.myModule Tuve que usar la sintaxis de matriz para que esto funcionara. import * as operators from 'rxjs/operators'; window['operators'] = operators;

    – Jmaurier

    6 de noviembre de 2020 a las 17:23

  • Tengo el mal presentimiento de que esto es tan bueno como parece. Bueno, hace el trabajo. ¡Gracias!

    –Jason Stewart

    18 de noviembre de 2021 a las 7:19

Avatar de usuario de David Foster
David Foster

Puede esperar a importación dinámica dentro de la consola de Chrome:

const Module = await import('./path/to/module.js')
Module.doSomething()

Esa importación dinámica es más o menos equivalente a:

import * as Module from './path/to/module.js';
Module.doSomething()

Hay una manera de usar Chrome Dev Tools con módulos ES6, si usa Código VSC y el Depurador de Javascript para Chrome. Tuve algunos problemas para hacerlo funcionar, pero valió la pena.
https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome

El depurador de VSCode abre una nueva ventana de Chrome que está conectada al depurador de VSCode. También puede usar Chrome Dev Tools (F12) en esta ventana como de costumbre. Funciona con módulos ES6 y puedes establecer puntos de interrupción, usar la consola, inspeccionar variables, etc…


En caso de que tenga problemas para configurar el depurador, así es como funcionó para mí:

  • Vaya a la ventana de depuración de VSCode (CTRL+SHIFT+D) -> seleccionar Add Configuration del menú desplegable -> Seleccionar Chrome Launch o Chrome Launch Legacy para cambiar “lanzamiento.json”

mi lanzamiento.json:

{
  "name": "Launch Chrome Legacy",
  "type": "chrome",
  "request": "launch",
  "url": "http://localhost:5000/auth/login",
  "webRoot": "${workspaceFolder}",
  "sourceMaps": true
},
{
  "name": "Launch Chrome",
  "request": "launch",
  "type": "pwa-chrome",
  "url": "http://localhost:5000/auth/login",
  "webRoot": "${workspaceFolder}",
  "sourceMaps": true
},

La clave estaba en usar "sourceMaps": true y "url": "http://localhost:5000/auth/login" en lugar de http://localhost:5000/blog", que es la página que realmente quiero depurar. Sin embargo, cuando el Depurador abre la nueva ventana de Chrome, mi página fue redirigida a /auth/loginasí que tuve que usar esta url.

  • Puede intentar deshabilitar la Versión de vista previa del nuevo depurador y usar el Legacy versión en su lugar: Apagar Debug › JavaScript: Use Preview en la configuración de VSCode.
  • Entonces corre Launch Chrome Legacy desde la ventana de depuración en VSCode
  • Para establecer puntos de interrupción en VSCode, abra el módulo javascript desde Loaded Scripts

Puede llamar a las funciones contenidas en los módulos de Javascript desde la consola de desarrollo de Chrome mediante la importación, como en la respuesta de @Kin.

Si obtiene el error “Error de tipo: no se pudo resolver el especificador del módulo”, intente usar la URL completa para el archivo del módulo. Por ejemplo, en Windows 10 con IIS ejecutándose localmente y Chrome 87, esto funciona para mí:

// Call doSomething(), an exported function in module file mymodule.js
import('http://localhost/mysite/myfolder/mymodule.js').then((m) => { m.doSomething(); });

Avatar de usuario de Evert
Evert

Solo puede importar un módulo desde otros módulos, porque import es una característica de los módulos.

¿Cómo ‘importabas’ módulos antes de ES6? No lo hiciste, porque no existía. En realidad, puede interactuar con un módulo E6 de la misma manera que usó interactuar entre dos scripts independientes que no son módulos.

Avatar de usuario de Daniel Chin
Daniel Chin

Mantenga presionado y arrastre el archivo del módulo a la consola de desarrollo de Chrome.
Asegúrese de arrastrarlo a la sección de la línea de entrada (después de >) de la consola.

(Esto funciona en mi Chrome 78 bajo Windows 10).

¿Ha sido útil esta solución?