Javascript: Paket.json-Daten in gulpfile.js abrufen

101

Keine schluckspezifische Frage an sich, aber wie würde man Informationen aus der Datei package.json in der Datei gulpfile.js erhalten? Zum Beispiel möchte ich die Homepage oder den Namen abrufen und in einer Aufgabe verwenden.

Fahrbahn
quelle

Antworten:

116

Nicht require('./package.json')für einen Beobachtungsprozess verwenden. Mit requirewird das Modul als Ergebnis der ersten Anforderung aufgelöst. Wenn Sie also Ihre package.json bearbeiten, funktionieren diese Änderungen nur, wenn Sie den Überwachungsprozess stoppen und neu starten. Für einen Schluckbeobachtungsprozess ist es am besten, die Methode von bitlinguist zu verwenden, da die Datei jedes Mal, wenn Ihre Aufgabe ausgeführt wird, erneut gelesen und analysiert wird.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
Haptikdaten
quelle
4
Einverstanden, dass "require" das Ergebnis zwischenspeichert (was es ungeeignet macht, wenn Sie lesen / ändern / erneut lesen möchten). Das macht es jedoch nicht in allen Fällen zu einer schlechten Lösung. Das OP erwähnte ausdrücklich, dass er Informationen daraus lesen wollte.
Verstümmelt Deutz
2
Es ist möglich require, den Cache mitdelete require.cache[require.resolve(FILEPATH)];
curly_brackets
@KennethB Warum nicht als separate Antwort? Würde mehr als genug Upvotes fahren.
Kaiser
138

Dies ist nicht schluckspezifisch.

var p = require('./package.json')
p.homepage

AKTUALISIEREN:

Beachten Sie, dass "require" die Leseergebnisse zwischenspeichert. Dies bedeutet, dass Sie nicht benötigen, in die Datei schreiben, dann erneut anfordern und erwarten können, dass die Ergebnisse aktualisiert werden.

Verstümmelter Deutz
quelle
7
Ich fühlte mich definitiv wie ein Idiot, als ich danach suchte, als ich deine Antwort sah. Natürlich!
Spikeheap
1
Arbeitete für mich: P. Und +1 für den Kommentar zum Caching habe ich später auf 'fs.readFileSync ()' umgestellt, wie unten ausgeführt.
Bart
@spikeheap Ich weiß nicht, ob ich jemals laut gelacht habe, bevor ich einen Kommentar zu StackOverflow gelesen habe, aber ich war genau richtig mit dir! Danke für den Jubel. Haha.
Bit-less
6

Dies ist eine gute Lösung @Mangled Deutz. Ich selbst habe das zuerst getan, aber es hat nicht funktioniert (zurück in einer Sekunde), dann habe ich diese Lösung ausprobiert:

# Gulpfile.coffee
requireJSON = (file) ->
    fs = require "fs"
    JSON.parse fs.readFileSync file

Jetzt sollten Sie sehen, dass dies ein bisschen ausführlich ist (obwohl es funktioniert hat). require('./package.json')ist die beste Lösung:

Trinkgeld

- Denken Sie daran, './' vor dem Dateinamen hinzuzufügen. Ich weiß, dass es einfach ist, aber es ist der Unterschied zwischen der erforderlichen Methode und der nicht funktionierenden Methode.

Dewwwald
quelle
Vielen Dank! das hat enorm geholfen.
Adam Grant
1
danke für upvotes, hab endlich kommentare. :) Ich bin froh, dass es dir geholfen hat.
Dewwwald
0

Wenn Sie einen Schluck von NPM auslösen, wie zum Beispiel " npm run build " oder so

(Dies funktioniert nur bei Schluck-Run-Triggern von NPM.)

process.env.npm_package_ Object

Dies sollte durch einen Unterstrich für tiefere Objekte getrennt werden.

Wenn Sie eine bestimmte Konfiguration in package.json lesen möchten, wie Sie das in package.json erstellte Konfigurationsobjekt lesen möchten

scripts : {
   build: gulp 
},
config : {
   isClient: false.
}

dann kannst du verwenden

process.env.npm_package_**config_isClient**
Manasvi Sareen
quelle