Entonces, estoy escribiendo una aplicación con el nodo / express + jade combo.
Tengo client.js
, que se carga en el cliente. En ese archivo tengo un código que llama a funciones de otros archivos JavaScript. Mi intento fue usar
var m = require('./messages');
para cargar el contenido de messages.js
(al igual que lo hago en el lado del servidor) y luego llamar a las funciones de ese archivo. Sin embargo, require
no está definido en el lado del cliente, y arroja un error del formulario Uncaught ReferenceError: require is not defined
.
Estos otros archivos JS también se cargan en tiempo de ejecución en el cliente porque coloco los enlaces en el encabezado de la página web. Entonces, el cliente conoce todas las funciones que se exportan desde estos otros archivos.
¿Cómo llamo a estas funciones desde estos otros archivos JS (como messages.js
) en el client.js
archivo principal que abre el socket al servidor?
<script src="messages.js"></script>
y los llamas después de eso?--require
opción de browserify hacerequire()
que se defina en el lado del cliente. Ver: lincolnloop.com/blog/speedy-browserifying-multiple-bundlesRespuestas:
Esto se debe a
require()
que no existe en el navegador / JavaScript del lado del cliente.Ahora tendrá que tomar algunas decisiones sobre la gestión de secuencias de comandos JavaScript del lado del cliente.
Tienes tres opciones:
<script>
etiquetaLas implementaciones del lado del cliente CommonJS incluyen:
(la mayoría de ellos requieren un paso de compilación antes de implementar)
Puede leer más sobre mi comparación de Browserify vs (en desuso) Componente .
Las implementaciones de AMD incluyen:
Tenga en cuenta que, en su búsqueda para elegir con cuál ir, leerá sobre Bower . Bower es solo para dependencias de paquetes y no se opina en las definiciones de módulos como CommonJS y AMD.
Espero que esto ayude un poco.
fuente
<script>
etiqueta para importar una clase React sin el uso de un administrador de paquetes nodeJs?Vengo de un entorno de electrones, donde necesito comunicación IPC entre un proceso de renderizador y el proceso principal. El proceso de representación se encuentra en un archivo HTML entre las etiquetas de script y genera el mismo error. La línea
arroja el Error de referencia no capturado: el requisito no está definido
Pude evitar eso al especificar la integración de nodos como verdadera cuando la ventana del navegador (donde está incrustado este archivo HTML) se creó originalmente en el proceso principal.
Eso resolvió el problema para mí. La solución fue propuesta aquí . Espera que esto ayude a alguien más. Salud.
fuente
ES6: en html, incluya el archivo js principal usando el atributo
type="module"
( soporte de navegador )Y en el
script.js
archivo incluye otro archivo como ese:Dentro del archivo incluido (
module.js
) debe exportar la función / clase que importaráEjemplo de trabajo aquí .
fuente
val
en un objeto de ventanawindow.val = val
. Aquí está plunker: Plunker: plnkr.co/edit/aDyjyMxO1PdNaFh7ctBT?p=preview - esta solución funcionaEn mi caso usé otra solución.
Como el proyecto no requiere CommonJs y debe tener compatibilidad con ES3 (no se admiten módulos), todo lo que necesita es eliminar todas las declaraciones de exportación e importación de su código , porque su tsconfig no contiene
Pero use declaraciones de importación y exportación en sus archivos referenciados
El código final generado siempre tendrá (al menos para el mecanografiado 3.0) tales líneas
fuente
Incluso usar esto no funcionará, creo que la mejor solución es browserify:
fuente
Esto funcionó para mí
<script data-main="your-Scrpt.js" src="require.js"></script>
Nota!
use: -> require (['moudle-name']) en "your-script.js"
no requiere ('nombre-moudle')const {ipcRenderer} = require (['electron'])
No: const {ipcRenderer} = require ('electron')
fuente