NEWS
(beantwortet) Frage zu npm - neues Modul laden (extraneous)
-
Auf der Seite zum https://www.npmjs.com/package/circuit kann ich keine Methode .Client finden. `
Das sieht nach einem ganz anderem Modul aus, als dass, was ich nutzen möchte.
Kann es sein, dass nicht das Module aus der circuit.tgz verwendet wird, sondern das, auf deren Beschreibung Du verlinkt hast?
Und daher die Methode nicht gefunden wird?
-
// Load the circuit module var circuit = require('circuit'); var message = circuit.prop(function(name) { return 'Hello, ' + name; }); // set the value to `Alice` message('Alice'); // get the transformed value var a = message(); // a == "Hello, Alice" // set the value to `Bob` message('Bob'); // get the transformed value var b = message(); // b == "Hello, Bob" log("a = " + a + " ## b = " + b);
Das Script funktioniert.
javascript-1 2016-03-12 19:53:37 info script.js.Test_Skript1: a = Hello, Alice ## b = Hello, Bob javascript-1 2016-03-12 19:53:37 info Start javascript script.js.Test_Skript1
Mit var circuit = require('circuit'); wird also das npm Modul verwendet, auf das paul53 verlinkt hat
Was muss ich denn machen, damit das Modul verwendet wird, das ich aus derDatei circuit.tgz installiert habe?
-
Nach ein bisschen Recherche…
- unter ../iobroker/node_modules/circuit
liegt das Paket, das ich benötige
-
unter ../iobroker/node_modules/iobroker.javascript/node_modules/circuit
liegt das Paket, dessen Beschreibung paul53 verlinkt hat
var circuit = require('circuit'); ````verwendet das Modul unter ../iobroker/node_modules/iobroker.javascript/node_modules/circuit Wie installiere ich das Modul korrekt, so dass man das Ergebnis auch einfach oder in einem Adapter verwenden kann? Habe ich bei der Installation was falsch gemacht, s.o.?
-
Nach ein bisschen Recherche…
- unter ../iobroker/node_modules/circuit
liegt das Paket, das ich benötige
-
unter ../iobroker/node_modules/iobroker.javascript/node_modules/circuit
liegt das Paket, dessen Beschreibung paul53 verlinkt hat
var circuit = require('circuit'); ````verwendet das Modul unter ../iobroker/node_modules/iobroker.javascript/node_modules/circuit Wie installiere ich das Modul korrekt, so dass man das Ergebnis auch einfach oder in einem Adapter verwenden kann? Habe ich bei der Installation was falsch gemacht, s.o.? `
Du kannst "/iobroker/node_modules/iobroker.javascript/node_modules/circuit" löschen und dann sollte schon dein Modul verwendet werden
-
[
Du kannst "/iobroker/node_modules/iobroker.javascript/node_modules/circuit" löschen und dann sollte schon dein Modul verwendet werden `
Danke! Funktioniert leider trotzdem nicht. :roll:
Ich habe beide Pfade gelöscht. Und im iobroker Verzeichnis neu installiert:
Michaels-iMac:iobroker michael$ npm install ./circuit.tgz \ > utf-8-validate@1.2.1 install /Users/michael/iobroker/node_modules/circuit/node_modules/ws/node_modules/utf-8-validate > node-gyp rebuild CXX(target) Release/obj.target/validation/src/validation.o SOLINK_MODULE(target) Release/validation.node > bufferutil@1.2.1 install /Users/michael/iobroker/node_modules/circuit/node_modules/ws/node_modules/bufferutil > node-gyp rebuild CXX(target) Release/obj.target/bufferutil/src/bufferutil.o SOLINK_MODULE(target) Release/bufferutil.node circuit@1.1.5600-1 node_modules/circuit └── ws@0.8.1 (utf-8-validate@1.2.1, bufferutil@1.2.1)
Die Abfrage npm list circuit zeigt nun einen Fehler, den ich vorher nicht hatte (hat nichts mit dem Löschen zu tun. War nach meinen diversen Versuchen irgendwann da):
Michaels-iMac:iobroker michael$ npm list circuit /Users/michael/iobroker └── (empty) npm ERR! code 1
"/iobroker/node_modules/iobroker.javascript/node_modules/circuit" ist gelöscht
unter "/iobroker/node_modules/circuit" liegt das benötigte Modul.
Das Testscript:
! ````
// Load the circuit module
var circuit = require('circuit');
! var message = circuit.prop(function(name) {
return 'Hello, ' + name;
});// set the value to
Alice
message('Alice');// get the transformed value
var a = message(); // a == "Hello, Alice"// set the value to
Bob
message('Bob');// get the transformed value
var b = message(); // b == "Hello, Bob"! log("a = " + a + " ## b = " + b);
! // Load the circuit module
var Circuit = require('circuit');
! // Instantiate a client and logon
var client = new Circuit.Client();client.logon({email: 'bob@unify.com', password: 'P@ssw0rd'}).then(function (user) { log('Logged on user: ' + user); }, function (err) { log("circuit error","error"); });
! ````
Funktioniert immer noch für das Modul, welches ich unter iobroker.javascript gelöscht hatte und erzeugt für das von mir benötigte Modul immer noch den Fehler.
javascript-1 2016-03-12 22:00:36 error at script.js.Test_Skript1:408:18 javascript-1 2016-03-12 22:00:36 error script.js.Test_Skript1: TypeError: Circuit.Client is not a function javascript-1 2016-03-12 22:00:36 info script.js.Test_Skript1: a = Hello, Alice ## b = Hello, Bob javascript-1 2016-03-12 22:00:36 info Start javascript script.js.Test_Skript1
Der erste Fehler npm ERR! code 1 war vorher nicht da.
Vielleicht habe ich zu viel getestet und probiert und was "kaputt gemacht"? :shock:
[EDIT]
Funktioniert jetzt.
Ich musste nach dem Löschen das Modul vom Verzeichnis "/iobroker/node_modules/circuit" nach "/iobroker/node_modules/iobroker.javascript/node_modules/circuit kopieren.
-
Also nach meinem Verständnis liegt das Problem doch nicht darin dass das Modul nicht korrekt installiert wäre sondern dass Du den Client falsch aufrufst.
Der Fehler ist:
` > ````javascript-1 2016-03-12 22:00:36 error script.js.Test_Skript1: TypeError: Circuit.Client is not a function
```` `Das bedeutet doch dass in der folgenden Zeile was falsch ist:
` > ````
var client = new Circuit.Client();
```` `
Nur mal eine Vermutung von mir - lass mal die Klammern hinter "Client" weg. Wie gesagt ist ne Vermutung und so toll fit bin ich noch nicht in der Syntax von JS. Könnte auch sein, dass es in dem Modul was Du installiert hast wirklich keine Funktion "Client" gibt…
-
Also nach meinem Verständnis liegt das Problem doch nicht darin dass das Modul nicht korrekt installiert wäre sondern dass Du den Client falsch aufrufst.
Der Fehler ist:
` > ````javascript-1 2016-03-12 22:00:36 error script.js.Test_Skript1: TypeError: Circuit.Client is not a function
```` `Das bedeutet doch dass in der folgenden Zeile was falsch ist:
` > ````
var client = new Circuit.Client();
```` `
Nur mal eine Vermutung von mir - lass mal die Klammern hinter "Client" weg. Wie gesagt ist ne Vermutung und so toll fit bin ich noch nicht in der Syntax von JS. Könnte auch sein, dass es in dem Modul was Du installiert hast wirklich keine Funktion "Client" gibt… `
Hallo Thisoft,
danke für Dein Feedback. Der Aufruf im Script ist richtig. Ist auch eine 1:1 Kopie aus dem Beispiel für das Modul.
Es funktioniert jetzt. Es war wirklich die Installation des Moduls. Da das Modul über die gepackte Datei installiert wird und es aber auch ein Modul auf npm mit identischen Namen gibt, hatte ich im Javascript-Verzeichnis das falsche Modul.
Ich musste, wie bluefox geschrieben hatte, das Modul im Javascript-Verzeichnis löschen und dann aber noch eine Kopie aus dem "nodes_module" Hauptverzeichnis wieder rein kopieren.
Habe viel gelernt. Danke für jedes Feedback.
Gruß
Michael
-
OK, schön dass es jetzt bei dir klappt. Hab ich ja gewissermaßen auch wieder was gelernt. Ich bin halt verwöhnt von einer IDE die einem fehlende Verweise ('require') schon im Editor "um die Ohren haut".
Gruß Thilo
-
…Ich bin halt verwöhnt von einer IDE die einem fehlende Verweise ('require') schon im Editor "um die Ohren haut". `
Hi Thilo,
das 'require' war auch korrekt vorhanden. Es lag wirklich an den unterschiedlichen "circuit" node Modulen.
Die Erkenntnisse aus den Tests zusammengefasst, ohne Anspruch auf Richtigkeit:
<size size="150">"/iobroker/node_modules/"</size>
- Hier liegen die Pakte, die von iobroker und node.js verwendet werden.?
<size size="150">"/iobroker/node_modules/iobroker.adaptername/node_modules/"</size>
-
Hier liegen die Pakete, die zusätzlich von einem Adapter verwendet werden. Die Pakete sind für alle Instanzen eines Adapter identisch.
-
Automatische Installation durch den Adapter während dessen Installation. Welche Module individuell für den Adapter installiert werden steht in der package.json des Adapters unter "dependencies".
-
Manuelle Installation durch den Anwender: für den Javascript Adapter, siehe nächster iobroker.admin, Reiter Instanzen: "
-
Manuelle Installation durch den Anwender: im Verzeichnis "/iobroker/node_modules/iobroker.javascript/" npm ausführen, z.B. > npm install bleacon (wenn ein Modul direkt von npm installiert werden oder z.B. > npm install ./circuit.tgz, wenn ein Modul, welches in dem Verzeichnis lokal liegt, installiert werden soll.
<size size="150">iobroker.admin, Reiter Instanzen:</size>
-
Hier können im Javascript Adapter runter "Zusätzliche NPM-Module" zusätzliche npm Module installiert werden, die auf npm bekannt sind.
-
Die Module werden nach dem Speichern der Einstellungen unter "/iobroker/node_modules/iobroker.javascript/node_modules/" installiert (Log kontrollieren). Wenn sie einmal installiert sind, könnte der Eintrag in den Einstellungen des Adapter s auch raus.
-
Einige Module werden mit dem Javascript-Adapter schon vorinstalliert, wie z.B. wake_on_lan, request, suncalc.
Auszug aus der package.json des JavaScript-Adapters (die Quellen der Adapter liegen auf npm):
"dependencies": { "node-schedule": "1.0.0", "request": "^2.69.0", "suncalc": "^1.7.0", "wake_on_lan": "0.0.4", "coffee-compiler": "^0.3.2", "coffee-script": ">=1.10.0" },
Auszug aus der package.json des Sonor-Adapters (hier liegt die Quelle des Moduls nicht auf npm):
, "dependencies": { "sonos-web-controller": "https://github.com/jishi/node-sonos-web-controller/tarball/master/" },
-
Die Module fs, crypto, util, path, os, net, events, dns sollen laut Javascript Adapter Dokumentation auch vorinstalliert sein, tauchen aber unter
"/iobroker/node_modules/iobroker.javascript/node_modules/" nicht auf. Sie sind auch unter "/iobroker/node_modules/" nicht zu finden. offene Frage: wo werden diese Module abgelegt?
<size size="150">Dokumentation von npm Modulen</size>
-
auf https://www.npmjs.com findet man die Dokumentation zu den dort vorhandenen npm Modulen
-
Beispiel für das Modul request: https://www.npmjs.com/package/request
-
-
Die Module fs, crypto, util, path, os, net, events, dns sollen laut Javascript Adapter Dokumentation auch vorinstalliert sein, tauchen aber unter
"/iobroker/node_modules/iobroker.javascript/node_modules/" nicht auf. Sie sind auch unter "/iobroker/node_modules/" nicht zu finden. offene Frage: wo werden diese Module abgelegt? `
Das sind eingebaute Module. Die sind im node.js Core drin und müssen nicht installiert sein:
assert buffer child_process cluster crypto dgram dns events fs http https net os path punycode querystring readline repl string_decoder tls tty url util vm zlib
-