2014-03-25 5 views
83

keinen Zug spezifische Frage per se, aber, wie man Informationen innerhalb der gulpfile.js aus der package.json Datei erhalten würde; Zum Beispiel möchte ich die Homepage oder den Namen bekommen und in einer Aufgabe verwenden.Javascript: package.json Daten in gulpfile.js

Antwort

90

Sie require('./package.json') nicht für eine Uhr-Prozess verwenden. Die Verwendung von require löst das Modul als Ergebnis der ersten Anfrage auf. Wenn Sie also Ihre package.json bearbeiten, werden diese Änderungen nicht funktionieren, es sei denn, Sie stoppen Ihren Überwachungsprozess und starten ihn neu. Für einen Schlucküberwachungsprozess wäre es am besten, die Bitlinguist-Methode zu verwenden, da die Datei erneut gelesen und jedes Mal analysiert wird, wenn Ihre Aufgabe ausgeführt wird.

var fs = require('fs'); 

var json = JSON.parse(fs.readFileSync('./package.json')); 
+4

Vereinbart, dass "require" das Ergebnis zwischenspeichert (was es ungeeignet macht, wenn Sie lesen/ändern/neu lesen wollen). 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. –

+2

Es ist möglich, 'require' zu ​​verwenden und den Cache mit' delete require.cache [require.resolve (FILEPATH)] zu entfernen; ' –

+0

@KennethB Warum nicht als separate Antwort? Würde mehr als genug upvotes fahren. – kaiser

121

Diese schlucke ist nicht spezifisch.

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

UPDATE:

Beachten Sie, dass „require“ werden die Leseergebnisse zwischenspeichern - das heißt, Sie können nicht verlangen, in die Datei schreiben, benötigen dann wieder und erwarten, dass die Ergebnisse aktualisiert werden.

+6

ich auf jeden Fall fühlte verwenden wie ein Idiot, der nach dem gesucht hat, als ich deine Antwort gesehen habe. Na sicher! – spikeheap

+0

Arbeitete für mich: P. Und +1 für den Kommentar zum Caching, ich wechselte später zu 'fs.readFileSync() ', wie unten beschrieben. – Bart

+0

@spikeheap Ich weiß nicht, ob ich jemals laut gelacht habe, bevor ich einen Kommentar zu StackOverflow gelesen habe, aber ich war RICHTIG dabei! Danke für den Beifall. Haha. –

5

Dies ist eine gute Lösung @Mangled Deutz. Ich selbst tat zunächst, dass aber es hat nicht funktioniert (Zurück zu, dass in einer Sekunde), dann habe ich versucht, diese Lösung:

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

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

Tip

-Denken Sie daran hinzufügen ‚./‘ vor dem Dateinamen. Ich weiß, es ist einfach, aber es ist der Unterschied zwischen der erfordern Methode funktioniert und nicht funktioniert.

+0

Danke! Das hat enorm geholfen. –

+1

danke für upvotes, endlich Kommentare. :) Froh, dass es dir geholfen hat. – dewwwald

0

Wenn Sie auslösen Schluck aus NPM, wie mit "npm laufen bauen" oder etwas

(Dies funktioniert nur für schluck Lauf von NPM auslöst)

process.env.npm_package_ Objekt

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

, wenn Sie einige spezifische config in package.json lesen möchten, wie Sie Config Objekt lesen möchten Sie in package.json erstellt haben

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

dann können Sie

process.env.npm_package_**config_isClient**