Node.js App wird global nicht gefunden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2021 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Node.js App wird global nicht gefunden

    Hallo zusammen,

    ich hab mir eine kleine Node.js App zur Unterstützung gebaut, die ich auch gerne anderen zur Verfügung stellen würde. Leider hab ich das Problem, dass wenn ich diese über "npm i -g" installiere, das Kommando nicht gefunden wird. Es wird nicht mal eine Verknüpfung angelegt.

    Hat da jemand von euch eine Idee? Ich google seit Stunden aber ohne Erfolg..

    Meine Package-Json sieht so aus (Ausschnitt):

    Quellcode

    1. {
    2. "name": "@myPrefix/myApp",
    3. "version": "0.2.2",
    4. "description": "Local Server",
    5. "preferGlobal": true,
    6. "bin": {
    7. "myApp": "./dist/src/index.js"
    8. },
    Der Code ist in TypeScript und wird nach JS umgewandelt. Prinzipiell sollte doch das funktionieren oder? Wo hab ich hier den Fehler?

    Viele Grüße und Danke
    Nils
  • Korrekt. Wenn Du es global installierst, dann sollte im System verfügbar sein.

    Hast Du überprüft, ob das Module installiert worden ist? - Also bei meinem System verweist /usr/local/bin/npm nach /usr/local/lib/node_modules/npm/bin/npm-cli.js. Das würde in deinem Fall bedeuten, dass Du dein Modul unter /usr/local/lib/node_modules/@myPrefix/myApp/ finden solltest. Wenn das der Fall ist, würde ich mal überprüfen ob es ein /usr/local/bin/myApp gibt, das sollte ausführbar für jeden sein und nach /usr/local/lib/node_modules/@myPrefix/myApp/dist/src/index.js verweisen.

    Ist mir gerade aufgefallen: Wieso eigentlich dist/src/index.js und nicht dist/index.js? Stimmt das schon? Hätte jetzt erwartet, dass die Typescript-Quellen unter src/ liegen und nach dist/ transpiliert werden und nicht nach dist/src/.

    Documentation package.json. Shebang #!/usr/bin/env node hast Du nicht zufälligerweise vergessen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von manoh ()

  • Hi @manoh,

    danke für deine schnelle und ausführliche Antwort! /usr/local/lib/node_modules/@myPrefix/myApp/ ist meine App da. Aber unter /usr/local/bin/myApp halt nicht. Das ist denke ich genau das Problem. Aber ich verstehe es nicht.


    Der Path dist/src/index.js ist ein wenig komisch, aber so, weil ich einen Test Ordner noch habe. Ich hab den mal rausgenommen aber leider kein Erfolg.

    Meine index.js sollte eigentlich richtig sein:

    Quellcode

    1. #!/usr/bin/env node
    2. Object.defineProperty(exports, "__esModule", { value: true });
    3. const program = require("commander");
    4. const fs = require("fs");
    5. const path = require("path");
    6. const start_1 = require("./start");
    7. .....

    Noch eine Idee? Alle anderen global installierten Pakete gehen. Also von andern Anbietern. Das Probleme ist auch nicht nur auf meinen Mac sondern auch auf Windows und anderen Macs. Also irgendwas ist da anders.

    Viele Grüße
    Nils
  • Ich habe das mit einem minimalen lokalen Module ausprobiert und bei mir funktioniert das wie erwartet.

    Allerdings habe ich einen bin-Ordner, wo mein ausführbares Programm drinnen ist bin/hello-world.js. Rechte zum Ausführen sind natürlich gesetzt (chmod +x bin/hello-world.js). Ansonsten besteht das ausführbare Programm nur aus der Shebang-Zeile und ein require('../dist/hello-world.js').

    Das package.json sieht ähnlich aus, nur

    Quellcode

    1. ...
    2. "bin": {
    3. "hello-world": "./bin/hello-world.js"
    4. },
    5. ...
  • Hi @manoh,

    danke für dein ausprobieren! Jetzt wird es langsam dubios.

    Also auf ein paar Rechnern funktioniert es nun und auf ein paar nicht. Ich hab jetzt genau wie du auch mal das Kommando hello-world hinzugefügt. npm list -g --depth=0 zeigt auch folgendes an:

    Quellcode

    1. npm list -g --depth=0
    2. /usr/local/lib
    3. ├── @myPrefix/myApp@0.2.6
    Nur in /usr/local/bin ist halt nichts. Wie kann das sein? Das ist nicht das einzige globale Paket und andere gehen.

    Viele Grüße
    Nils
  • Also ich verwende hier npm Version 7.5.4 (und node Version 15.7.0). Vielleicht hat deine npm Version einen Bug?

    Habe mal schnell gegoogelt. Rufe mal dein Install-Kommando mit der Option -ddd für --loglevel silly auf. Vielleicht kannst Du daraus etwas lesen.

    Dein Nutzer kann schon nach /usr/local/bin schreiben, oder? - Würde zwar erwarten, dass npm meckert wenn das nicht funktioniert, aber wer weiß... Bei mir geht das mit meinen Nutzer, da ich auch brew verwende und die mögen kein root und darum sind die Rechte dementsprechend unter /usr/local gesetzt.
  • Danke für die Tipps! Das Log Level war leider nicht sehr Aufschlussreich.

    Ich darf auf jeden Fall auf /user/local/bin schreiben. Hab das auch mit brew gemacht und bei anderen globalen Paketen geht es.

    Aber jetzt wird es extrem dubios: Ich hab jetzt via npm pack mir das Paket lokal erzeugt und lokal installiert über npm i -g *Pfad zur .tgz*. Siehe da es funktioniert. Nun dasselbe Spiel über online und es funktioniert nicht mehr? Wir haben ein firmeninternes Gitlab. Dort werden die Packages gepublished. Hab mir von da die .tgz heruntergeladen via Browser. Sieht identisch aus.

    Wenn ich diese .tgz, die ich via Browser heruntergeladen hab lokal installiere, dann geht es auch. Aber wenn ich direkt über unser Gitlab gehe dann nicht?! Hast du da noch eine Idee? Das ist doch dubios.
    Logs sehen immer identisch aus.
  • Nö. Absolute keine Idee dazu. Ich habe das auch nur lokal ausprobiert und nicht von GitLab oder so. Vllt. hat es deswegen bei mir auch funktioniert.

    Ich habe mir auch meine Log-Ausgaben angesehen und fand ich auch nicht unbedingt hilfreich. Hätte gehofft, dass da eine Warning oder steht...

    Was ich noch weiß, ist, dass man mit VS Code wunderbar JavaScript Code debuggen kann. Also z.B. auch das installierte npm Node Module.
    1. Öffne den Ordner /usr/local/lib/node_moduels/npm (Command + Shift + G im Öffnen-Dialog / oder im Terminal code /usr/local/lib/node_moduels/npm)
    2. Setzte einen Breakpoint entsprechend - Die Frage ist nur wo...
    3. Zeige das integrierte Terminal an
    4. Nicht der +-Knopf, sondern wähle im Drop-Down-Menü Create JavaScript Debug Terminal aus
    5. Führe npm ... aus -> Der Debugger sollte am Breakpoint halten