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
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'));
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.
ich auf jeden Fall fühlte verwenden wie ein Idiot, der nach dem gesucht hat, als ich deine Antwort gesehen habe. Na sicher! – spikeheap
Arbeitete für mich: P. Und +1 für den Kommentar zum Caching, ich wechselte später zu 'fs.readFileSync() ', wie unten beschrieben. – Bart
@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. –
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.
Danke! Das hat enorm geholfen. –
danke für upvotes, endlich Kommentare. :) Froh, dass es dir geholfen hat. – dewwwald
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**
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. –
Es ist möglich, 'require' zu verwenden und den Cache mit' delete require.cache [require.resolve (FILEPATH)] zu entfernen; ' –
@KennethB Warum nicht als separate Antwort? Würde mehr als genug upvotes fahren. – kaiser