Wie füge ich meiner package.json-Datei ein benutzerdefiniertes Skript hinzu, in dem eine Javascript-Datei ausgeführt wird?

175

Ich möchte den Befehl script1in einem Projektverzeichnis ausführen können, das ausgeführt wird node script1.js.

script1.jsist eine Datei im selben Verzeichnis. Der Befehl muss spezifisch für das Projektverzeichnis sein. Wenn ich also jemand anderem den Projektordner sende, kann er denselben Befehl ausführen.

Bisher habe ich versucht hinzuzufügen:

"scripts": {
    "script1": "node script1.js"
}

in meine package.json-Datei, aber wenn ich versuche auszuführen, erhalte script1ich die folgende Ausgabe:

zsh: command not found: script1

Kennt jemand die Schritte, die erforderlich sind, um das oben erwähnte Skript zum Projektordner hinzuzufügen?

* Hinweis: Der Befehl kann nicht zum Bash-Profil hinzugefügt werden (kann kein maschinenspezifischer Befehl sein).

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Jake.JS
quelle
3
Wie versuchst du es auszuführen? Verwenden Sie "npm run script1"?
Niorad
3
Hast du script1 mit ausgeführt npm run script1?
Claudiordgz
@Claudiordgz ist richtig, oder wie in Sujeets Antwort, "npm start" und "npm test" sind Abkürzungen für Skripte namens "start" und "test"
mjohnsonengr
1
In meinem Terminal muss ich in der Lage sein, den Befehl mit einem Wort script1node script1.js
einzugeben,

Antworten:

259

Benutzerdefinierte Skripte

npm run-script <custom_script_name>

oder

npm run <custom_script_name>

In Ihrem Beispiel möchten Sie npm run-script script1oder ausführen npm run script1.

Siehe https://docs.npmjs.com/cli/run-script

Lebenszyklus-Skripte

Mit Node können Sie auch benutzerdefinierte Skripts für bestimmte Lebenszyklusereignisse npm installausführen, z. B. nach der Ausführung. Diese finden Sie hier .

Beispielsweise:

"scripts": {
    "postinstall": "electron-rebuild",
},

Dies würde electron-rebuildnach einem npm installBefehl ausgeführt.

wesleysmyth
quelle
1
npm run-script scriptnamehat für mich gearbeitet, aber npm run scriptnamenicht!
Blueprintchris
Wie ist es möglich, ein benutzerdefiniertes Skript ohne den Befehl "run" auszuführen? Sails.js dosiert das - es hat einen Befehl, sails liftder sogar NPM erfordert. Fügt die Installation über NPM ein Terminalskript auf dem System hinzu, auf dem es installiert ist? Wenn nicht, wie wird das gemacht?
Gal Grünfeld
@ GalGrünfeld hast du Segel global installiert (npm install -g)?
Yves Dorfsman
Ich habe, und ich habe etwas gelesen und, soweit ich mich erinnern kann, auf der Website von Sail -gfestgestellt, dass Sails Bash / Cmdlet-Skripte installiert (z. B. sails generate api <api_name>(Bash / Cmdlet je nach dem Computer, auf dem es installiert wird) und fügt diesen Skripten auf der Maschine globale Pfade hinzu.
Gal Grünfeld
Wie führe ich die JS-Datei des heruntergeladenen npm-Pakets über meine package.json aus?
Hardik Rana
26

Ich habe Folgendes erstellt und es funktioniert auf meinem System. Bitte versuchen Sie dies:

package.json:

{
  "name": "test app",
  "version": "1.0.0",
  "scripts": {
    "start": "node script1.js"   
  }
}

script1.js:

console.log('testing')

Führen Sie in Ihrer Befehlszeile den folgenden Befehl aus:

npm start

Zusätzlicher Anwendungsfall

Meine package.json-Datei enthält im Allgemeinen die folgenden Skripts, mit denen ich meine Dateien auf Typoskript, Sass-Kompilierungen und den Betrieb eines Servers überwachen kann.

 "scripts": {
    "start": "concurrently \"sass --watch ./style/sass:./style/css\" \"npm run tsc:w\" \"npm run lite\" ",    
    "tsc": "tsc",
    "tsc:w": "tsc -w", 
    "lite": "lite-server",
    "typings": "typings",
    "postinstall": "typings install" 
  }
Sujeet Jaiswal
quelle
1
Der Befehl zum Ausführen der script1.jsDatei muss ein benutzerdefinierter Ein-Wort-Befehl seinscript1
Jake.JS
dann ändern Sie "start"zu script1, Sie können jeden Namen verwenden, den Sie mögen, ich bevorzuge, um startklar zu definieren, was laufen soll
Sujeet Jaiswal
3
@ sujeet-jaiswal einfach von start zu script1 zu wechseln wird nicht funktionieren. Das Wort "Start" ist in npm reserviert, damit es funktioniert. Das Wort script1 ist nicht und wird auch dann nicht erkannt, wenn es in package.json definiert ist. Die obige Antwort von wesleysmyth ist die richtige. Fügen Sie dem Aufruf einfach run hinzu.
Predrag Stojadinović
17

Schritte sind unten:

  1. In package.json hinzufügen:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Erstellen Sie einen binOrdner im Projektverzeichnis und fügen Sie eine Datei runScript1.jsmit dem folgenden Code hinzu:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Führen Sie npm install shelljsin Terminal

  4. Führen Sie npm linkin Terminal

  5. Vom Terminal aus können Sie jetzt ausführen, script1was ausgeführt wirdnode script1.js

Referenz: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm

Jake.JS
quelle
Dies sollte die akzeptierte Antwort sein, die auf dem Kommentar von @ Jake.JS zu seiner Frage basiert, dh wie sie mit einem einzigen Befehl ausgeführt wird.
AdamJB
Dies sollte die akzeptierte Antwort sein, die auf der Frage basiert
Damian
2

Nehmen wir an, Sie möchten in Skripten zwei Befehle mit einem einzigen Befehl ausführen:

"scripts":{
  "start":"any command",
  "singleCommandToRunTwoCommand":"some command here && npm start"
}

Gehen Sie jetzt zu Ihrem Terminal und rennen Sie dorthin npm run singleCommandToRunTwoCommand.

Soban Arshad
quelle
Dies ist zwar hilfreich, beantwortet jedoch nicht direkt die Frage des OP.
AdamJB
1
Grundsätzlich sollen wir auf den richtigen Weg führen, mehr über Sie selbst. Dies ist die richtige Art zu lernen.
Soban Arshad
@AdamJB Er tut es, weil er npm run <script_name>
Kubadev
@kubadev, ich will nicht pedantisch sein, hat nur darauf hingewiesen, dass das OP erfordert, dass das Skript mit einem Ein-Wort-Befehl gemäß seinem eigenen Kommentar zu seiner Frage ausgeführt wird:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB
1

Beispiel:

  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "build_c": "ng build --prod && del \"../../server/front-end/*.*\" /s /q & xcopy /s dist \"../../server/front-end\"",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

Wie Sie sehen können, erstellt das Skript "build_c" die Winkelanwendung, löscht dann alle alten Dateien aus einem Verzeichnis und kopiert schließlich die Ergebniserstellungsdateien.

FindOutIslamNow
quelle
2
Hier sind einige nützliche Informationen über &&- stackoverflow.com/questions/39172536/…
Simon_Weaver