पुस्तकालय

लाइब्रेरी एक स्क्रिप्ट प्रोजेक्ट होता है. इसके फ़ंक्शन को अन्य स्क्रिप्ट में फिर से इस्तेमाल किया जा सकता है.

लाइब्रेरी का इस्तेमाल करने वाली स्क्रिप्ट, उतनी तेज़ी से नहीं चलती जितनी तेज़ी से तब चलती, जब पूरा कोड एक ही स्क्रिप्ट प्रोजेक्ट में शामिल होता. लाइब्रेरी से डेवलपमेंट और रखरखाव को ज़्यादा सुविधाजनक बनाया जा सकता है. हालांकि, जिन प्रोजेक्ट में स्पीड सबसे ज़रूरी होती है उनमें इनका इस्तेमाल कम करें. इस समस्या की वजह से, Google Workspace ऐड-ऑन में लाइब्रेरी का इस्तेमाल सीमित होना चाहिए.

किसी लाइब्रेरी का ऐक्सेस पाना

अपने प्रोजेक्ट में किसी लाइब्रेरी को शामिल करने के लिए, आपके पास कम से कम व्यू-लेवल का ऐक्सेस होना चाहिए. अगर आपको शामिल करनी है, तो उसके लेखक से संपर्क करें और ऐक्सेस का अनुरोध करें.

आपको उस लाइब्रेरी का स्क्रिप्ट आईडी चाहिए जिसे शामिल करना है. अगर आपके पास लाइब्रेरी का ऐक्सेस है, तो प्रोजेक्ट सेटिंग पेज पर जाकर स्क्रिप्ट आईडी ढूंढें.

अपने स्क्रिप्ट प्रोजेक्ट में लाइब्रेरी जोड़ना

  1. Apps Script एडिटर में बाईं ओर, "लाइब्रेरी" के बगल में, लाइब्रेरी जोड़ें पर क्लिक करें.
  2. "स्क्रिप्ट आईडी" फ़ील्ड में, लाइब्रेरी का स्क्रिप्ट आईडी चिपकाएं.
  3. खोजें पर क्लिक करें.
  4. वर्शन ड्रॉप-डाउन पर क्लिक करें और इस्तेमाल करने के लिए लाइब्रेरी का वर्शन चुनें.
  5. देखें कि डिफ़ॉल्ट "पहचानकर्ता" का नाम वही है जो आपको इस लाइब्रेरी के साथ इस्तेमाल करना है. यह वह नाम है जिसका इस्तेमाल आपकी स्क्रिप्ट, लाइब्रेरी को रेफ़र करने के लिए करती है. उदाहरण के लिए, अगर आपने इसे Test पर सेट किया है, तो उस लाइब्रेरी के किसी तरीके को इस तरह कॉल करें: Test.libraryMethod.
  6. जोड़ें पर क्लिक करें.

लाइब्रेरी का इस्तेमाल करना

शामिल की गई लाइब्रेरी का इस्तेमाल, डिफ़ॉल्ट सेवा की तरह करें. उदाहरण के लिए, अगर आपकी लाइब्रेरी का आइडेंटिफ़ायर Test है, तो लाइब्रेरी में मौजूद तरीकों की सूची देखने के लिए, Test टाइप करें. इसके तुरंत बाद, एक अवधि टाइप करें.

शामिल की गई लाइब्रेरी के लिए रेफ़रंस दस्तावेज़ खोलने के लिए, यह तरीका अपनाएं:

स्क्रिप्ट एडिटर में बाईं ओर, लाइब्रेरी के नाम के बगल में मौजूद, ज़्यादा > नए टैब में खोलें पर क्लिक करें.

लाइब्रेरी हटाना

स्क्रिप्ट एडिटर में बाईं ओर, लाइब्रेरी के नाम के बगल में मौजूद, ज़्यादा > हटाएं > लाइब्रेरी हटाएं पर क्लिक करें.

अगर लेखक ने किसी लाइब्रेरी को मिटा दिया है, तो भी आपको उसे शामिल की गई लाइब्रेरी की सूची से हटाना होगा.

लाइब्रेरी अपडेट करना

लाइब्रेरी का वर्शन बदलें या उसके आइडेंटिफ़ायर को अपडेट करें.

  1. एडिटर में बाईं ओर, "लाइब्रेरी" में जाकर, लाइब्रेरी के नाम पर क्लिक करें.
  2. बदलाव करने के बाद, सेव करें पर क्लिक करें.

लाइब्रेरी बनाना और उसे शेयर करना

अपने स्क्रिप्ट प्रोजेक्ट को लाइब्रेरी के तौर पर इस्तेमाल करने और शेयर करने के लिए, यह तरीका अपनाएं:

  1. अपनी स्क्रिप्ट का वर्शन वाला डिप्लॉयमेंट बनाएं.
  2. लाइब्रेरी के सभी संभावित उपयोगकर्ताओं के साथ, कम से कम व्यू-लेवल का ऐक्सेस शेयर करें.
  3. उन उपयोगकर्ताओं को स्क्रिप्ट आईडी दें. यह आईडी, प्रोजेक्ट सेटिंग पेज पर मौजूद होता है.

सबसे सही तरीके

लाइब्रेरी लिखते समय, इन दिशा-निर्देशों का पालन करें:

  1. अपने प्रोजेक्ट के लिए कोई ऐसा नाम चुनें जो समझ में आता हो. ऐसा इसलिए, क्योंकि जब आपकी लाइब्रेरी को दूसरे लोग शामिल करते हैं, तब इसका इस्तेमाल डिफ़ॉल्ट आइडेंटिफ़ायर के तौर पर किया जाता है.
  2. अगर आपको अपनी स्क्रिप्ट के एक या उससे ज़्यादा तरीकों को लाइब्रेरी के उपयोगकर्ताओं के लिए न तो दिखाना है और न ही उन्हें इस्तेमाल करने देना है, तो तरीके के नाम के आखिर में अंडरस्कोर जोड़ें. उदाहरण के लिए, myPrivateMethod_.
  3. लाइब्रेरी के उपयोगकर्ताओं को सिर्फ़ गिनी जा सकने वाली ग्लोबल प्रॉपर्टी दिखती हैं. इसमें ये शामिल हैं: फ़ंक्शन के एलान, var की मदद से फ़ंक्शन के बाहर बनाए गए वैरिएबल, और ग्लोबल ऑब्जेक्ट पर साफ़ तौर पर सेट की गई प्रॉपर्टी. उदाहरण के लिए, Object.defineProperty() को enumerable पर सेट करके false एक ऐसा सिंबल बनाया जाता है जिसे अपनी लाइब्रेरी में इस्तेमाल किया जा सकता है. हालांकि, यह सिंबल आपके उपयोगकर्ताओं के लिए उपलब्ध नहीं होता.
  4. यह पक्का करने के लिए कि आपकी लाइब्रेरी के उपयोगकर्ता, स्क्रिप्ट एडिटर में अपने-आप पूरा होने वाली सुविधा और अपने-आप जनरेट होने वाले दस्तावेज़ का इस्तेमाल कर सकें, अपने सभी फ़ंक्शन के लिए JSDoc स्टाइल वाला दस्तावेज़ शामिल करें. यहां एक उदाहरण दिया गया है:

    /**
     * Raises a number to the given power, and returns the result.
     *
     * @param {number} base the number we're raising to a power
     * @param {number} exp the exponent we're raising the base to
     * @return {number} the result of the exponential calculation
     */
    function power(base, exp) { ... }
    

संसाधन का दायरा तय करना

लाइब्रेरी के साथ काम करते समय, दो तरह के संसाधन होते हैं: शेयर किए गए और शेयर नहीं किए गए. शेयर किए गए संसाधन का मतलब है कि लाइब्रेरी और शामिल की गई स्क्रिप्ट, दोनों के पास संसाधन के एक ही इंस्टेंस का ऐक्सेस होता है. इस डायग्राम में, उपयोगकर्ता प्रॉपर्टी के उदाहरण का इस्तेमाल करके, शेयर किए गए संसाधन को दिखाया गया है:

शेयर किया गया संसाधन

शेयर नहीं किए गए रिसॉर्स का मतलब है कि लाइब्रेरी और स्क्रिप्ट, दोनों के पास सिर्फ़ रिसॉर्स के अपने इंस्टेंस का ऐक्सेस होता है. हालांकि, कोई लाइब्रेरी अपने ऐसे संसाधनों का ऐक्सेस दे सकती है जिन्हें शेयर नहीं किया गया है. इसके लिए, लाइब्रेरी में ऐसे फ़ंक्शन होने चाहिए जो उन संसाधनों पर काम करते हों. यहां एक ऐसे फ़ंक्शन का उदाहरण दिया गया है जिसे आपको अपनी लाइब्रेरी में शामिल करना होगा, ताकि उसकी स्क्रिप्ट प्रॉपर्टी दिख सकें:

  function getLibraryProperty(key) {
    const scriptProperties = PropertiesService.getScriptProperties();
    return scriptProperties.getProperty(key);
  }

इस डायग्राम में, स्क्रिप्ट प्रॉपर्टी के उदाहरण का इस्तेमाल करके, शेयर नहीं की गई किसी संसाधन के बारे में बताया गया है:

शेयर न किए गए संसाधन का उदाहरण

इस टेबल में, शेयर किए गए और शेयर नहीं किए गए संसाधनों की सूची दी गई है.

संसाधन शेयर किया गया* शेयर नहीं किया गया** नोट
लॉक करें लाइब्रेरी में बनाए जाने पर, यह इंस्टेंस सभी को दिखता है. इसमें स्क्रिप्ट भी शामिल हैं.
स्क्रिप्ट गुण लाइब्रेरी में बनाए जाने पर, यह इंस्टेंस सभी को दिखता है. इसमें स्क्रिप्ट भी शामिल हैं.
कैश मेमोरी लाइब्रेरी में बनाए जाने पर, यह इंस्टेंस सभी को दिखता है. इसमें स्क्रिप्ट भी शामिल हैं.
ट्रिगर लाइब्रेरी में बनाए गए सामान्य ट्रिगर, शामिल की गई स्क्रिप्ट से ट्रिगर नहीं होते हैं.
ScriptApp
UiApp
उपयोगकर्ता प्रॉपर्टी
लॉगर और एक्ज़ीक्यूशन ट्रांसक्रिप्ट
साइटें, शीट, और अन्य कंटेनर getActive को कॉल करने पर, स्क्रिप्ट के साथ-साथ कंटेनर भी वापस मिल जाता है.
MailApp और GmailApp
* इसका मतलब है कि लाइब्रेरी के पास सुविधा/संसाधन का अपना इंस्टेंस नहीं है. इसके बजाय, वह उस स्क्रिप्ट से बनाए गए इंस्टेंस का इस्तेमाल कर रही है जिसने इसे शुरू किया है.
** इसका मतलब है कि लाइब्रेरी के पास संसाधन/सुविधा का अपना इंस्टेंस है. साथ ही, लाइब्रेरी का इस्तेमाल करने वाली सभी स्क्रिप्ट, उस इंस्टेंस को शेयर करती हैं और उनके पास उसका ऐक्सेस होता है.

किसी लाइब्रेरी की जांच करना

अपनी लाइब्रेरी को टेस्ट करने के लिए, हेड डिप्लॉयमेंट का इस्तेमाल करें. जिन लोगों के पास स्क्रिप्ट के एडिटर लेवल का ऐक्सेस होता है वे हेड डिप्लॉयमेंट का इस्तेमाल कर सकते हैं.

हालांकि, आपको लाइब्रेरी का कम से कम एक वर्शन सेव करना होगा.

लाइब्रेरी को डीबग करना

लाइब्रेरी को शामिल करने वाली स्क्रिप्ट को डीबग करते समय, लाइब्रेरी के कोड में नहीं जाया जा सकता. साथ ही, उसमें ब्रेकपॉइंट सेट नहीं किए जा सकते. डीबग मोड में किसी लाइब्रेरी फ़ंक्शन में जाने की कोशिश करने पर, डीबगर उस फ़ंक्शन को स्किप कर देता है और कॉलिंग स्क्रिप्ट में अगली लाइन पर चला जाता है.

लाइब्रेरी के वर्शन के लिए, HEAD (डेवलपमेंट मोड) का इस्तेमाल करने से, लाइब्रेरी में स्टेप इन करने या उसमें ब्रेकपॉइंट हिट करने की सुविधा चालू नहीं होती.

लाइब्रेरी कोड को डीबग करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:

  • लाइब्रेरी प्रोजेक्ट से डीबग करना: Apps Script एडिटर में लाइब्रेरी स्क्रिप्ट प्रोजेक्ट खोलें. किसी खास आर्ग्युमेंट के साथ लाइब्रेरी फ़ंक्शन की जांच करने के लिए, लाइब्रेरी प्रोजेक्ट में एक अस्थायी "टेस्ट" फ़ंक्शन बनाएं. यह फ़ंक्शन, आपके लाइब्रेरी फ़ंक्शन को कॉल करता है. इसके बाद, उस टेस्ट फ़ंक्शन को डीबग मोड में चलाएं.
  • लॉगिंग: अपनी लाइब्रेरी के फ़ंक्शन में console.log() का इस्तेमाल करके, एक्ज़ीक्यूशन लॉग में जानकारी आउटपुट करें. जब लाइब्रेरी को किसी दूसरी स्क्रिप्ट से कॉल किया जाता है, तो ये लॉग, कॉल करने वाली स्क्रिप्ट के एक्ज़ीक्यूशन लॉग में दिखते हैं.