Tengo frontend y backend. Desde el backend obtengo html prerenderizado (formulario de Symfony) que incluye script con etiqueta de origen. El origen es localhost:8001.
<html> <head> ... </head> <body> ... <div class="container"> {% block javascripts %} <script type="module" src="http://localhost:8020/build/form_generator/script.js"></script> {% endblock %} </div> </body> </html>En la interfaz (localhost: 8020), script.js se encuentra en la carpeta Pública. El script se carga bien, pero dentro del script quiero cargar otro módulo desde la interfaz (Select2, que está instalado en node_modules) pero no puedo cargarlo correctamente. Select2 se importa correctamente dentro de otros scripts en la interfaz. secuencia de comandos.js:
/** @module script*/ import 'select2'; // gives log error 1 import select2 from "../../../node_modules/select2/dist/js/select2"; // gives log error 2error de registro 1: TypeError no detectado: no se pudo resolver el especificador de módulo "select2". Las referencias relativas deben comenzar con "/", "./" o "../".
error de registro 2: OBTENER http://localhost:8020/node_modules/select2/dist/js/select2 net::ERR_ABORTED 404 (No encontrado)
Los módulos cargados por el navegador no pueden usar las reglas de resolución de módulos de Node.JS.
No tienen acceso al sistema de archivos. No pueden buscar en un directorio node_modules .
Necesitas:
p.ej
import select2 from '/static/js/select2.js';Alternativamente, use un paquete (como Webpack o Parcel) que puede hacer la resolución del módulo Node.js para agrupar todos los módulos en un solo archivo JS que puede cargar como un no módulo.