जावास्क्रिप्ट: gulpfile.js में package.json डेटा प्राप्त करें


101

प्रति gulp- विशिष्ट प्रश्न नहीं, लेकिन किसी को gulpfile.js के भीतर package.json फ़ाइल से जानकारी कैसे मिलेगी; उदाहरण के लिए, मैं मुखपृष्ठ या नाम प्राप्त करना चाहता हूं और इसे किसी कार्य में उपयोग करना चाहता हूं।

जवाबों:


116

require('./package.json')एक घड़ी की प्रक्रिया के लिए उपयोग न करें । उपयोग requireकरने से पहले अनुरोध के परिणाम के रूप में मॉड्यूल को हल किया जाएगा। इसलिए यदि आप अपने पैकेज को संपादित कर रहे हैं। तो उन संपादन को काम नहीं करेंगे जब तक आप अपनी घड़ी की प्रक्रिया को रोक नहीं देते हैं और इसे फिर से शुरू नहीं करते हैं। एक gulp घड़ी की प्रक्रिया के लिए बिटलिंगुइस्ट की विधि का उपयोग करना सबसे अच्छा होगा क्योंकि यह फ़ाइल को फिर से पढ़ेगा और हर बार यह बताएगा कि आपका कार्य निष्पादित है।

var fs = require('fs');

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

4
सहमत है कि "की आवश्यकता है" परिणाम कैश करता है (यदि आप इसे पढ़ने / संशोधित / फिर से पढ़ने का इरादा रखते हैं तो यह अनुपयुक्त है)। हालांकि यह सभी मामलों में एक बुरा समाधान नहीं है। ओपी ने स्पष्ट रूप से उल्लेख किया कि वह इसके बारे में जानकारी पढ़ना चाहता था।
मंगली देउत्ज

2
यह संभव है requireकि कैश का उपयोग करें और हटाएंdelete require.cache[require.resolve(FILEPATH)];
कर्ली_ब्रैकेट्स

@KennethB अलग उत्तर के रूप में क्यों नहीं? और अधिक ड्राइव करेंगे तो पर्याप्त upvotes।
कैसर

138

यह गुल विशिष्ट नहीं है।

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

अपडेट करें:

ध्यान रखें कि "आवश्यकता" पढ़े गए परिणामों को कैश कर देगा - जिसका अर्थ है कि आपको आवश्यकता नहीं हो सकती है, फ़ाइल में लिखें, फिर आवश्यकता होगी और परिणामों को अपडेट करने की अपेक्षा करें।


7
जब मैंने आपका उत्तर देखा तो मुझे निश्चित रूप से इसे खोजने के लिए एक बेवकूफ की तरह महसूस हुआ। बेशक!
स्पाइकहैप

1
मेरे लिए काम किया: पी। और कैशिंग के बारे में टिप्पणी के लिए +1, मैंने बाद में नीचे बताए अनुसार 'fs.readFileSync ()' का उपयोग करने के लिए स्विच किया।
बार्ट

@spikeheap मुझे नहीं पता कि क्या मैंने कभी स्टैकऑवरफ़्लो पर टिप्पणी पढ़ने से पहले ज़ोर से हँसा है, लेकिन मैं आपके साथ वहाँ था! चीयर्स के लिए धन्यवाद। Haha।
बिट-कम

6

यह एक अच्छा उपाय है @Mangled Deutz। मैंने खुद पहले ऐसा किया था, लेकिन यह काम नहीं किया (एक सेकंड में वापस), फिर मैंने इस समाधान की कोशिश की:

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

अब आपको देखना चाहिए कि यह थोड़ा वर्बोज़ है (भले ही यह काम किया हो)। require('./package.json')सबसे अच्छा समाधान है:

टिप

फ़ाइल नाम के सामने './' जोड़ने के लिए। मुझे इसका सरल पता है, लेकिन यह काम करने की आवश्यकता विधि और काम न करने के बीच का अंतर है।


धन्यवाद! इससे काफी मदद मिली।
एडम ग्रांट

1
upvotes के लिए धन्यवाद, अंत में टिप्पणियां हैं। :) खुशी है कि यह आपकी मदद की।
देववल्द

0

यदि आप एनपीएम से गल्प को ट्रिगर कर रहे हैं, जैसे " एनपीएम रन बिल्ड " या कुछ और

(यह एनपीएम द्वारा केवल गल्प रन ट्रिगर्स के लिए काम करता है)

process.env.npm_package_ ऑब्जेक्ट

यह गहरी वस्तुओं के लिए अंडरस्कोर द्वारा जब्त किया जाना चाहिए।

यदि आप package.json में कुछ विशिष्ट कॉन्फिग को पढ़ना चाहते हैं, जैसे आप config ऑब्जेक्ट पढ़ना चाहते हैं जो आपने package.json में बनाया है

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

तो आप उपयोग कर सकते हैं

process.env.npm_package_**config_isClient**
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.