Electron: jQuery no está definido

Resuelto Bruno Vaz asked hace 9 años • 21 respuestas

Problema: mientras desarrolla con Electron, cuando intenta utilizar cualquier complemento JS que requiera jQuery, el complemento no encuentra jQuery, incluso si carga en la ruta correcta usando etiquetas de secuencia de comandos.

Por ejemplo,

<body>
<p id="click-me">Click me!</p>
...
<script src="node_modules/jquery/dist/jquery.min.js"></script> //jQuery should be loaded now
<script>$("#click-me").click(() => {alert("Clicked")});</script>
</body>

Ejecutar este código anterior no funcionaría. De hecho, abra DevTools, vaya a la vista Consola y haga clic en el <p>elemento. Deberías ver eso function $ is not definedo algo por el estilo.

Bruno Vaz avatar Sep 17 '15 10:09 Bruno Vaz
Aceptado

Una solución mejor y más genérica en mi opinión:

<!-- Insert this line above script imports  -->
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>

<!-- normal script imports etc  -->
<script src="scripts/jquery.min.js"></script>    
<script src="scripts/vendor.js"></script>    

<!-- Insert this line after script imports -->
<script>if (window.module) module = window.module;</script>

Beneficios

  • Funciona tanto para navegador como para electron con el mismo código.
  • Soluciona problemas para TODAS las bibliotecas de terceros (no solo jQuery) sin tener que especificar cada una
  • Script Build / Pack Friendly (es decir, Grunt / Gulp todos los scripts en seller.js)
  • NO requiere node-integrationser falso

fuente aquí

Dale avatar May 27 '2016 10:05 Dale

Como se ve en https://github.com/atom/electron/issues/254 , el problema se debe a este código:

if ( typeof module === "object" && typeof module.exports === "object" ) {
  // set jQuery in `module`
} else {
  // set jQuery in `window`
}

El código jQuery "ve" que se está ejecutando en un entorno CommonJS y lo ignora window.

La solución es realmente fácil , en lugar de cargar jQuery <script src="...">, deberías cargar así:

<script>window.$ = window.jQuery = require('./path/to/jquery');</script>

Nota: el punto antes de la ruta es obligatorio , ya que indica que es el directorio actual. Además, recuerda cargar jQuery antes de cargar cualquier otro complemento que dependa de él .

Bruno Vaz avatar Sep 17 '2015 03:09 Bruno Vaz