javascript - attribute - Nicht gefundener Fehler: Modul 'jquery' kann nicht gefunden werden



html title attribute (4)

Das gleiche Problem ist mir passiert. Eine einfache Lösung besteht darin, Folgendes zu Ihrer index.js-Datei hinzuzufügen:

app.on('ready', function() {
      var mainWindow = new BrowserWindow({
        "node-integration": false
      })
//rest of your initialization code here.
})

Das Problem wird vom Knoten verursacht. Weitere Informationen finden Sie in diesem post

Wenn Sie die Knotenintegration auf false setzen, wird node.js im Renderer-Prozess deaktiviert, dh Ihre App kann nur das tun, was ein Webbrowser tut.

https://src-bin.com

Ich verwende Electron , um eine Desktop-App zu erstellen. In meiner App http://mydummysite/index.html ich eine externe Site (außerhalb der Atom-App), http://mydummysite/index.html . http://mydummysite/index.html Seite http://mydummysite/index.html .

Hier ist die Struktur meiner App im Atom Editor :

dh es besteht aus folgenden Teilen:

  1. main.js
  2. package.json
  3. nodemodules>jquery (um jquery zu laden)

Quellcode:

main.js:

   'use strict';

    var app = require('app');

    app.on('ready', function() {
      var BrowserWindow = require('browser-window');

      var win = 
      new BrowserWindow({ width: 800, height: 600, show: false, 
               'node-integration':true });
      win.on('closed', function() {
        win = null;
      });

      win.loadUrl('http://mydummysite/index.html ');
      win.show();
    });

package.json:

{
  "name": "my-mac-app",
  "version": "5.2.0",
  "description": "My Mac Desktop App",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "Me",
  "license": "ISC",
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

Externe Seite - http://mydummysite/index.html :

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <h1>Hello World!</h1>

  </body>
<script>

   var jqr=require('jquery');

</script>
</html>

Wenn ich die obige App ausführe (indem ich den Anwendungsordner auf Electron http://mydummysite/index.html ), wird die externe Seite ( http://mydummysite/index.html ) in die Electron-Shell http://mydummysite/index.html aber mit dem Fehler

Nicht gefundener Fehler: Modul 'jquery' kann nicht gefunden werden

Können Sie mir helfen, die Ursache für dieses Problem zu finden?

Wie Sie in meinem Screenshot der Verzeichnisstruktur sehen können, habe ich bereits das jquery-Modul in meinem Ordner installiert und dies über den Befehl npm install jquery ausgeführt.

Hinweis: Um mit dem Befehl require in JS zu spielen, habe ich versucht, require("ipc") in meine externe Seite http://mydummysite/index.html und es hat funktioniert, was der Grund für require("jquery") .

Habe ich das externe Modul (jquery) in Electron korrekt hinzugefügt?

package.json mir eine Abhängigkeit in package.json ?

Was ich schon ausprobiert habe:

  • npm cache clean , npm install jquery (in meinen app npm install jquery )
  • npm install --save jquery
  • npm install jquery -g
  • npm rebuild
  • sudo npm install jquery -g
  • sudo npm install jquery
  • export NODE_PATH=/usr/local/lib/node_modules

Hier ist der Screenshot des Speicherorts, an dem der Fehler in module.js

Kann jemand vorschlagen, warum require("ipc") funktioniert und require("jquery") nicht?

Mein Ziel ist es, jQuery mit elektronischer App mit Knotenintegration wahr zu verwenden.



Answer #2

Jquery mit npm zu installieren ist nicht genug:

npm install --save jquery

Es stellt die Quelldateien von jQuery in Ihrem Projekt wieder her. Sie müssen das Skript jedoch in Ihre HTML-Datei einfügen:

<!DOCTYPE html>
<html>
  <head></head>

  <body>
      <h1>Hello World!</h1>
  </body>

  <!-- Try to load from cdn to exclude path issues. -->
  <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

  <script>
     window.jQuery = window.$ = jQuery;

     $(document).ready(function() {
         console.log( "jQuery is loaded" );
     });
  </script>

</html>

Answer #3

tl; dr

Im Gegensatz zu einer normalen nodejs-App, in der Sie Zugriff auf globale Module haben (z. B. in /usr/bin/node ), setzt electron die Umgebungsvariablen NODE_PATH nicht automatisch. Sie müssen es manuell auf alle Pfade einstellen, die Ihre gewünschten Module enthalten.

Aktualisieren:

Die Antwort auf die Frage

Warum funktioniert require("ipc") und require("jquery") nicht?

In dieser issue wird angegeben, dass System- / Benutzermodule nicht im globalen Pfad des Moduls enthalten sein dürfen

da sie Module enthalten könnten, die nicht im Lieferumfang der App enthalten sind und möglicherweise mit den falschen v8-Headern kompiliert wurden.

Und wenn Sie sich die Quelle von electron ansehen, können Sie sehen, dass interne Module zu module.globalPaths hinzugefügt werden:

# Add common/api/lib to module search paths.
globalPaths.push path.resolve(__dirname, '..', 'api', 'lib')

Aus diesem Grund haben Sie Zugriff auf ipc , app usw., jedoch nicht auf die Module, die Sie global mithilfe von npm install -g .

Ich habe es gerade mit der neuesten electron-prebuilt Version mit einem lokalen Server ausprobiert, der genau dieselbe HTML-Datei node_modules , die Sie bereitgestellt haben, und ich glaube, ich weiß, was das Problem ist: Wenn Sie den Pfad zu Ihrem Verzeichnis app node_modules unter Ihrem nicht anhängen App root auf die Variable NODE_PATH wird es nicht funktionieren. Sie müssen also so etwas tun:

export NODE_PATH=/PATH/TO/APP/node_modules
electron /PATH/TO/APP

NODE_PATH Sie beim Export von NODE_PATH sicher, dass Sie einen absoluten Pfad NODE_PATH .

Update 2:

Die Antwort auf den Kommentar:

Ich bekomme jQuery nicht gefundene Fehler

Ist in diesem Ticket zu finden . Grundsätzlich gilt: Wenn Sie das npm-Paket von jQuery verwenden oder in Ihren HTML-Dateien in electron Folgendes tun:

<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

Sie erhalten eine Factory und nicht das eigentliche jQuery-Objekt, das an den globalen Kontext angehängt ist (z. B. window ). Wie ich in einer vorherigen Antwort erwähnt habe (enthält auch den Quellcode von jQuery)

Wenn Sie jQuery in einer CommonJS-Umgebung oder einer ähnlichen Umgebung benötigen, die module und module.exports , erhalten Sie eine Factory und nicht das eigentliche jQuery-Objekt.

Um diese Factory zu verwenden (entweder durch Importieren des Codes vom CDN oder wenn Sie das npm-Modul lokal verfügbar haben), benötigen Sie Folgendes:

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

Ich habe einen article , der die Kombination von Node + jQuery erklärt.





electron