ग्रंट - कॉन्फ़िगर करने वाले कार्य

आप Gruntfile.js फ़ाइल में Grunt के लिए प्रोजेक्ट-विशिष्ट कॉन्फ़िगरेशन डेटा को परिभाषित कर सकते हैं ।

ग्रांट कॉन्फ़िगरेशन

Grunt.initConfig () पद्धति का उपयोग करके कार्य कॉन्फ़िगरेशन डेटा को ग्रंटफाइल में आरंभीकृत किया जा सकता है । Grunt.initConfig () फ़ंक्शन के अंदर , package.json फ़ाइल से कॉन्फ़िगरेशन जानकारी लें। कॉन्फ़िगरेशन नाम का एक कार्य होगाproperties और कोई भी मनमाना डेटा।

grunt.initConfig({
   jshint: {
      // configuration for jshint task
   },
   cssmin: {
      // configuration for cssmin task
   },
   // Arbitrary non-task-specific properties
   my_files: ['dir1/*.js', 'dir2/*.js'],
});

कार्य विन्यास और लक्ष्य

जब आप कोई कार्य चला रहे होते हैं, तो ग्रंट कार्य-नामित संपत्ति के तहत कॉन्फ़िगरेशन की तलाश करता है। हम नीचे दिखाए गए अनुसार कई कॉन्फ़िगरेशन और लक्ष्य विकल्पों के साथ कार्यों को परिभाषित करेंगे -

grunt.initConfig({
   jshint: {
      myfile1: {
         // configuration for "myfile1" target options
      },
      myfile2: {
         // configuration for "myfile2" target options
      },
   },
   cssmin: {
      myfile3: {
         // configuration for "myfile3" target options
      },
   },
});

यहाँ, jshint टास्क में myfile1 और myfile2 टारगेट और cssmin टास्क में myfile3 टारगेट है। जब आप ग्रंट जिशंट चला रहे होते हैं , तो यह निर्दिष्ट लक्ष्य विन्यास को संसाधित करने के लिए कार्य और लक्ष्य दोनों पर पुनरावृत्ति करेगा।

विकल्प

कार्य कॉन्फ़िगरेशन के अंदर विकल्प संपत्ति को परिभाषित करें जो कार्य चूक को ओवरराइड करता है। प्रत्येक लक्ष्य में विकल्प संपत्ति शामिल होती है जो कार्य-स्तर के विकल्पों को ओवरराइड करती है। यह निम्नलिखित प्रारूप होगा -

grunt.initConfig({
   jshint: {
      options: {
         // task-level options that overrides task defaults
      },
      myfile: {
         options: {
            // "myfile" target options overrides task defaults
         },
      },

      myfile1: {
         // there is no option, target will use task-level options
      },
   },
});

फ़ाइलें

ग्रंट निर्दिष्ट करने के लिए कुछ विचार प्रदान करता है कि किस फाइल पर कार्य संचालित होना चाहिए और src-dest फ़ाइल मैपिंग को निर्दिष्ट करने के लिए विभिन्न तरीकों का उपयोग करता है । निम्नलिखित कुछ अतिरिक्त गुण हैं जो src और डेस्ट मैपिंग द्वारा समर्थित हैं -

  • filter- यह एक फ़ंक्शन है जो मिलान किए गए src फ़ाइल पथ को निर्दिष्ट करता है और सही या गलत मान देता है।

  • nonull - यह नॉन मैचिंग पैटर्न को परिभाषित करता है, जब यह सच हो जाता है।

  • dot - यह एक अवधि या अन्यथा के साथ शुरू होने वाले फ़ाइल नामों से मेल खाता है।

  • matchBase - यह उन पैटर्नों से मेल खाता है जिनमें पथ के बेसनेम के साथ स्लैश होते हैं।

  • expand - यह src-dest file मैपिंग को प्रोसेस करता है।

कॉम्पैक्ट प्रारूप

यह प्रति लक्ष्य src-dest फ़ाइल मैपिंग को निर्दिष्ट करता है जिसका उपयोग केवल-पढ़ने वाले कार्यों के लिए किया जा सकता है और इसके लिए केवल src प्रॉपर्टी और न ही कोई डेस्ट प्रॉपर्टी की आवश्यकता होती है।

grunt.initConfig({
   jshint: {
      myfile1: {
         src: ['src/file1.js','src/file2.js']
      },
   },
   cssmin: {
      myfile2: {
         src: ['src/file3.js','src/file4.js'],
         dest: 'dest/destfile.js',
      },
   },
});

फ़ाइलें ऑब्जेक्ट स्वरूप

यह प्रति लक्ष्य src-dest फ़ाइल मैपिंग को निर्दिष्ट करता है जिसमें संपत्ति का नाम भाग्य फ़ाइल है और इसका मान src फ़ाइल है।

grunt.initConfig({
   jshint: {
      myfile1: {
         files: {
            'dest/destfile.js':['src/file1.js','src/file2.js'],
            'dest/destfile1.js':['src/file3.js','src/file4.js'],
         },
      },
      myfile2: {
         files: {
            'dest/destfile2.js':['src/file22.js','src/file23.js'],
            'dest/destfile21.js':['src/file24.js','src/file25.js'],
         },
      },
   },
});

फ़ाइलें सरणी प्रारूप

यह प्रति मैपिंग अतिरिक्त गुण का उपयोग करके प्रति लक्ष्य src-dest फ़ाइल मैपिंग को निर्दिष्ट करता है।

grunt.initConfig({
   jshint: {
      myfile1: {
         files: [
            {src:['src/file1.js','src/file2.js'],dest:'dest/file3.js'},
            {src:['src/file4.js','src/file4.js'],dest:'dest/file5.js'},
         ],
      },
      myfile2: {
         files: [
            {src:['src/file6.js','src/file7.js'],dest:'dest/file8/', nonull:true},
            {src:['src/file9.js','src/file10.js'],dest:'dest/file11/', filter:'isFalse'},
         ],
      },
   },
});

पुराने प्रारूप

गंतव्य के रूप में लक्ष्य फ़ाइल स्वरूप multitasks के अस्तित्व जहां गंतव्य फ़ाइल पथ लक्ष्य का नाम है से पहले नहीं थी। निम्नलिखित प्रारूप को पदावनत किया गया है और इसका उपयोग कोड में नहीं किया जाना है।

grunt.initConfig({
   jshint: {
      'dest/destfile2.js':['src/file3.js','src/file4.js'],
      'dest/destfile5.js':['src/file6.js','src/file7.js'],
   },
});

कस्टम फ़िल्टर फ़ंक्शन

आप फ़िल्टर फ़ाइलों का उपयोग करके बड़े स्तर के विस्तार के साथ लक्ष्य फ़ाइलों की मदद कर सकते हैं। निम्न प्रारूप केवल फ़ाइलों को साफ़ करता है यदि यह वास्तविक फ़ाइल से मेल खाता है।

grunt.initConfig({
   clean: {
      myfile:{
         src: ['temp/**/*'],
         filter: 'isFile',
      },
   },
});

ग्लोबिंग पैटर्न

ग्लोबिंग का अर्थ है फ़ाइल नाम का विस्तार करना। ग्रंट अंतर्निहित नोड-ग्लोब और मिनिमैच लाइब्रेरी का उपयोग करके ग्लोबिंग का समर्थन करता है । ग्लोबिंग पैटर्न में निम्नलिखित बिंदु शामिल हैं -

  • * किसी भी वर्ण से मेल खाता है, लेकिन नहीं /
  • ? एक एकल चरित्र से मेल खाता है, लेकिन / नहीं ।
  • ** सहित कई पात्रों से मेल खाता है /
  • {} "या" अभिव्यक्तियों की अल्पविराम से अलग सूची निर्दिष्ट करता है।
  • ! शुरुआत में पैटर्न मैच को नकार देगा।

उदाहरण के लिए -

{src: 'myfile/file1.js', dest: ...} // it specifies the single file

{src: 'myfile/*.js', dest: ...} //it matches all the files ending wth .js

{src: 'myfile/{file1,file2}*.js', dest: ...} //defines the single node glob pattern

{src: ['myfile/*.js', '!myfile/file1.js'], dest: ...} // all files will display in alpha

// order except for file1.js

फाइलों को गतिशील रूप से बनाना

जब आप अलग-अलग फ़ाइलों के साथ काम कर रहे हैं, तो आप गतिशील रूप से फ़ाइलों की सूची बनाने के लिए अतिरिक्त गुणों का उपयोग कर सकते हैं। जब आप सेट करते हैंexpand संपत्ति को सच करने के लिए, यह निम्नलिखित गुणों में से कुछ को सक्षम करेगा -

  • cwd इस पथ पर सभी src से मेल खाता है।

  • src , cwd के सापेक्ष मैच करने के पैटर्न से मेल खाता है ।

  • गंतव्य संपत्ति गंतव्य पथ उपसर्ग को निर्दिष्ट करती है।

  • ext मौजूदा रास्तों को गंतव्य रास्तों में उत्पन्न मान से बदल देगा ।

  • extDot इंगित करता है कि एक्सटेंशन दर्शाने वाली अवधि कहाँ स्थित है। यह या तो पहली अवधि या अंतिम अवधि का उपयोग करता है ; डिफ़ॉल्ट रूप से, यह पहली अवधि के लिए सेट है

  • चपटा भाग्य पथ से सभी पथ भागों को निकालता है।

  • नाम बदलने के लिए एक स्ट्रिंग है जिसमें नया गंतव्य और फ़ाइल नाम है।

नाम बदलें संपत्ति

यह एक अद्वितीय जावास्क्रिप्ट फ़ंक्शन है जो एक स्ट्रिंग लौटाता है और आप नाम बदलने के लिए स्ट्रिंग मान का उपयोग नहीं कर सकते। निम्नलिखित उदाहरण में, कॉपी कार्य README.md का बैकअप बनाएगा।

grunt.initConfig({
   copy: {
      backup: {
         files: [{
            expand: true,
            src: ['docs/README.md'],    // creating a backup of README.md
            rename: function () {       // specifies the rename function
               return 'docs/BACKUP.txt'; // returns a string with the complete destination
            }
         }]
      }
   }
});

टेम्पलेट्स

आप <%%> सीमांकक का उपयोग करके टेम्पलेट निर्दिष्ट कर सकते हैं । जब वे कॉन्फ़िगर से पढ़े जाते हैं तो वे अपने आप विस्तारित हो जाएंगे। इसमें दो प्रकार के गुण शामिल हैं -

  • <%= prop.subprop %>प्रॉपर्टी का उपयोग config में prop.subprop के मान को विस्तारित करने के लिए किया जाता है जो स्ट्रिंग मानों, सरणियों और अन्य वस्तुओं को संदर्भित कर सकता है।

  • <% %> संपत्ति इनलाइन जावास्क्रिप्ट कोड को निष्पादित करती है जो नियंत्रण प्रवाह या लूपिंग के लिए उपयोग किया जाता है।

उदाहरण के लिए -

grunt.initConfig({
   concat: {
      myfile: {
         options: {
            banner: '/* <%= val %> */\n',
         },
         src: ['<%= myval %>', 'file3/*.js'],
         dest: 'build/<%= file3 %>.js',
      },
   },
   // properties used in task configuration templates
   file1: 'c',
   file2: 'b<%= file1 %>d',
   file3: 'a<%= file2 %>e',
   myval: ['file1/*.js', 'file2/*.js'],
});

बाहरी डेटा आयात करना

आप package.json फ़ाइल से बाहरी डेटा आयात कर सकते हैं । स्रोत फ़ाइल को छोटा करने के लिए grunt- contrib- uglify प्लगइन का उपयोग किया जा सकता है और यह मेटाडेटा का उपयोग करके एक बैनर टिप्पणी बनाता है। आप JSON और YAML डेटा आयात करने के लिए grunt.file.readJSON और grunt.file.readYAML का उपयोग कर सकते हैं ।

उदाहरण के लिए -

grunt.initConfig({
   pkg: grunt.file.readJSON('package.json'),
   uglify: {
      options: {
         banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      dist: {
         src: 'src/<%= pkg.name %>.js',
         dest: 'dist/<%= pkg.name %>.min.js'
      }
   }
});