Dodávanie argumentov do Gulpu

Každý z nás si určite už niekedy v živote položil tú otázku: Ako možno gulpu dynamicky dodávať argumenty z CLI?

2016-02-06
Node

Odpoveď nájdeme v samotnom Node.js.

Pretože Gulp beží v node environmente, máme automaticky prístup ku globálnemu objektu s názvom process. Jeho attribute process.argv je array obsahujúce argumenty dodané pri spúšťaní procesu.

Čo sa týka vizuálnej prehľadnosti nie je process.argv práve najpríťažlivejším riešením, vyvažuje to však jeho univerzálnosť a dostupnosť bez prídavných modulov a dependencies. Iba BIO Gulp a Node.js.

process.argv obsahuje defaultne 2 položky, ktoré zaberajú prvé dve miesta v array:

  • process.argv[0] printne prostredie v ktorom proces prebehol (obvykle '/usr/bin/node', záleží od inštalácie)
  • process.argv[1] vráti cestu a názov spracovávaného scriptu. V prípade Gulpu vráti cestu ku gulp-cli modulu

Vyššie indexy poskytujú prístup k užívateľsky dodaným argumentom. Podľa Node.js dokumentacie možno argumenty do procesu dodať v tvare node script arg1 arg2 arg3.

Gulp však potrebuje rozlíšiť kedy ho voláme s prídavnými argumentmi a kedy mu dodávame názvy preddefinovaných gulp taskov.

Pomôžeme si štandardnou predponou pre shell options: - alebo --.

Môžeme použiť tvary:

1
gulp -option1 --option2 -option3 argument1 --option4 argument2

pričom aj samotnému -option priradí array index podľa pozície. Výsledkom tak bude:

1
2
3
4
5
6
7
8
process.argv[0] == ... node.js
process.argv[1] == ... gulp-cli
process.argv[2] == -option1
process.argv[3] == --option2
process.argv[4] == -option3
process.argv[5] == argument1
process.argv[6] == --option4
process.argv[7] == argument2

Example

gulpfile.js

1
2
3
4
5
6
7
8
const gulp = require('gulp');
gulp.task('echo',()=>{
process.argv.forEach((val, index, array) => {
console.log(`${index}: ${val}`);
});
console.log(`\nGulp has processed arguments "${process.argv[4]}" and "${process.argv[6]}"`);
});

CLI

1
2
3
4
5
6
7
8
9
gulp echo -a first -b second
0: /usr/bin/node
1: /home/kilo/.npm/bin/gulp
2: echo
3: -a
4: first
5: -b
6: second
Gulp was processed with arguments "first" and "second"

vďaka prístupu do process.argv sa už dajú napísať jednoduché conditional podmienky vďaka array metódam ako .length alebo .indexOf.

! Pozor na argumenty true, false a porovnávanie === operátorom: budú spracované ako type string, nie boolean.


Komentáre: