`npm build` führt das Skript mit dem Namen" build "in package.json nicht aus

138

Für ein neues Modul versuche ich es npm buildohne gulp / Grunt / andere spezialisierte Build-Tools zu verwenden.

"scripts": {
  "build": "node build.js"
},

Meine build.js ist einfach

console.log('Hello')

Allerdings läuft

npm build

Beendet einfach, ohne etwas zu drucken, mit dem Status 0.

Laufen:

npm install

Macht auch alle normalen Dinge, führt aber auch build.js nicht aus.

Wie kann ich npm dazu bringen, mein Build-Skript auszuführen?

Bearbeiten: Selbst einfache Bash-Befehle scheinen nicht zu funktionieren, z

"scripts": {
    "build": "touch TESTFILE"
},

Erstellt keine Datei mit diesem Namen.

Mikemaccana
quelle
Problemumgehung: Verwenden Sie installstattdessen.
Zaz
Dies ist im Grunde eine große und unintuitive Belästigung von NPM und einer der Gründe, warum ich weiterhin Garn verwende. Mit Garn kann ich jedes benutzerdefinierte Skript ausführen, nur als Parameter, dh Garn-Storybook führt das Storybook-Skript aus. In NPM muss ich npm run storybook machen und obendrein, wenn ich irgendwelche Parameter durch npm übergeben möchte, erfordert es - vorher, also beim Vergleichen von Garn Storybook --ci mit npm run storybook - --ci, Für mich ist das ein Kinderspiel.
Emobe

Antworten:

243

Leider npm buildist bereits ein interner Befehl, wie in den Dokumenten beschrieben :

Dies ist der Installationsbefehl, der von npm link und npm install aufgerufen wird. Es sollte im Allgemeinen nicht direkt aufgerufen werden.

Da dieser Befehl bereits vorhanden ist, wird er immer über Ihrem Befehl angezeigt "build": "node build.js".

Die vollqualifizierte Möglichkeit, ein eigenes Skript auszuführen, ist mit run-scriptoder seinem Aliasrun :

$ npm run build

npm startund andere sind der Kurzweg, aber nur eine Option, wenn ein vorhandener npm-Befehl ihn nicht wie npm buildfolgt beschattet .


Für die Nachwelt (wie bereits erwähnt) npm buildwird von npm verwendet, um native C / C ++ - Knoten-Addons mit Node-Gyp zu erstellen . Es ist nicht gut dokumentiert, da es normalerweise automatisch geschieht, aber wenn Sie interessiert sind, ist der Quellcode hier .

Jayphelps
quelle
15
Was macht npm build also? Soweit ich sehen kann,
bleiben
2
Einige Pakete erfordern einen Erstellungsprozess. Wenn Sie ausgeführt werden npm installund npm ein Paket mit C / C ++ - Bindungen oder allgemein etwas findet, für dessen Ausführung Node-Gyp erforderlich ist, wird es gestartet npm build. Sie können diese Pakete neu erstellen, indem Sie sie einfach npm buildalleine ausführen.
Jakub Miziołek
4
Interner Befehl sollte umbenannt werden _buildund npm buildsollte eine Verknüpfung wie npm startund seinnpm test
Pawel
1
Ich verstehe, dass npm buildmein Skript nicht aufgerufen wird und dass es zum Erstellen kompilierter Komponenten eines Pakets verwendet wird. Ich bin mir immer noch nicht sicher, wie das geht: Nach welchen Dateien sucht es usw.?
aaaidan
1
Wenn ich selbst ein Paket schreiben würde, wäre es immer noch schön zu wissen, was zu tun ist, um npm buildmit Bedeutung zu füllen ...
Frank Nocke
19

Das als "build" bezeichnete Skript package.jsonist in keiner Weise speziell. Die einzige Möglichkeit, es zum Laufen zu bringen, besteht darin, Folgendes aufzurufen:

npm run-script build

Es gibt einige Namen, die von npm automatisch aufgerufen werden , aber "build" gehört nicht dazu. Die vollständige Liste lautet:

  • prepublish, publish,postpublish
  • preinstall, install,postinstall
  • preuninstall, uninstall,postuninstall
  • preversion, version,postversion
  • pretest, test,posttest
  • prestop, stop,poststop
  • prestart, start,poststart
  • prerestart, restart,postrestart
  • preCUSTOMund postCUSTOMfür benutzerdefinierte Skriptnamen.
Flimm
quelle
3

OK, um einen Build selbst auszuführen, verwenden Sie:

npm run-script build
Mikemaccana
quelle
3

Ich hatte ein Problem damit, npm run buildnichts zu drucken. endete mit npm run build --verbose, um die Ausgabe zu bekommen, die ich brauchte.

Oder Gal
quelle
2

Npm Build erwartet

Ein Ordner, der eine Datei package.json im Stammverzeichnis enthält

Versuchen Sie, npm-Skripte in Ihrer package.json zu verwenden, wie beim klassischen npm-Start

Kangcor
quelle
Dies bedeutet, dass dies npm build .funktionieren sollte, und in meinem Fall führt npm das Skript "build" in meiner "package.json" aus, wie ich es mir erhofft hatte.
Erhhung