741 Stimmen

Wie kann man ausführbare Dateien aus einem lokal installierten Paket in node_modules verwenden?

Wie verwende ich eine lokale Version eines Moduls in node.js . In meiner App habe ich zum Beispiel coffee-script installiert:

npm install coffee-script

Dies installiert es in ./node_modules und der Kaffee-Befehl ist in ./node_modules/.bin/coffee . Gibt es eine Möglichkeit, diesen Befehl auszuführen, wenn ich mich im Hauptordner meines Projekts befinde? Ich denke, ich suche nach etwas Ähnlichem wie bundle exec im Bündler. Im Grunde möchte ich eine Version von coffee-script festlegen, die alle am Projekt Beteiligten verwenden sollen.

Ich weiß, ich kann die -g Flagge, um es global zu installieren, so dass Coffee überall gut funktioniert, aber was ist, wenn ich verschiedene Versionen von Coffee pro Projekt haben möchte?

12voto

guneysus Punkte 5747

Ich ziehe es vor, mich nicht auf Shell-Aliase oder ein anderes Paket zu verlassen.

Hinzufügen einer einfachen Zeile zu scripts Abschnitt Ihres package.json können Sie lokale npm-Befehle ausführen wie

npm run webpack

paket.json

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "webpack": "webpack"
  },
  "devDependencies": {
    "webpack": "^4.1.1",
    "webpack-cli": "^2.0.11"
  }
}

6voto

Jair Reina Punkte 2210

Ich habe immer den gleichen Ansatz wie @guneysus verwendet, um dieses Problem zu lösen, nämlich die Erstellung eines Skripts in der package.json-Datei und dessen Verwendung mit npm run script-name.

In den letzten Monaten habe ich jedoch npx und ich liebe es.

Ich habe zum Beispiel ein Angular-Projekt heruntergeladen und wollte die Angular-CLI nicht global installieren. Also, mit npx installiert, statt der Verwendung der globalen Angular-Cli-Befehl (wenn ich es installiert hatte) wie diese:

ng serve

Ich kann dies über die Konsole tun:

npx ng serve

Hier ist ein Artikel Ich habe über NPX geschrieben, und das geht tiefer in die Materie.

6voto

namuol Punkte 9506

Wenn Sie möchten, dass Ihre PATH-Variable auf der Grundlage Ihres aktuellen Arbeitsverzeichnisses korrekt aktualisiert wird, fügen Sie dies am Ende Ihrer .bashrc -Äquivalent (oder nach etwas, das PATH ):

__OLD_PATH=$PATH
function updatePATHForNPM() {
  export PATH=$(npm bin):$__OLD_PATH
}

function node-mode() {
  PROMPT_COMMAND=updatePATHForNPM
}

function node-mode-off() {
  unset PROMPT_COMMAND
  PATH=$__OLD_PATH
}

# Uncomment to enable node-mode by default:
# node-mode

Dies kann jedes Mal, wenn die Bash-Eingabeaufforderung gerendert wird, zu einer kurzen Verzögerung führen (was wahrscheinlich von der Größe Ihres Projekts abhängt), daher ist es standardmäßig deaktiviert.

Sie können es in Ihrem Terminal aktivieren und deaktivieren, indem Sie node-mode y node-mode-off .

2voto

Pioneer Skies Punkte 1298

Wie die von @regular akzeptierte Lösung, aber Fischschalengeschmack

if not contains (npm bin) $PATH
    set PATH (npm bin) $PATH
end

1voto

Nathan Punkte 5160

zxc ist wie "bundle exec" für nodejs. Es ist ähnlich wie die Verwendung von PATH=$(npm bin):$PATH :

$ npm install -g zxc
$ npm install gulp
$ zxc which gulp
/home/nathan/code/project1/node_modules/.bin/gulp

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X