2015-04-23 16 views
5

Mam nadzieję, że ktoś może wyjaśnić, jak metoda spawnCommand() Yeomana działa trochę. Pracuję nad generatorem i chciałbym go zainicjować repozytorium git, zatwierdzić i wypchnąć wygenerowaną aplikację na końcu.Przekaż do repozytorium git w generatorze yomanów?

Miałem wrażenie, że drugi parametr jest tablicą, jest to tablica poleceń, które będą uruchamiane w ramach procesu. Tak, coś takiego byłoby git '' init, a następnie 'git remote add pochodzenie' itd

end: function() { 
    if(this.repo !== '') { 
     this.spawnCommand('git', ['init', 
     'remote add origin ' + this.repo, 
     'add --all', 
     'commit -m "initial commit from generator"', 
     'push -u origin master'] 
    ); 
    } 
    console.log(yosay('I believe we\'re done here.')); 
} 

Niestety, to po prostu wyrzuca błąd Zastosowanie:

usage: git init [-q | --quiet] [--bare] ... 

Więc próbowałem robić startowych na własną rękę, a następnie przez innych tak:

end: function() { 
    if(this.repo !== '') { 
     this.spawnCommand('git', ['init']); 
     this.spawnCommand('git', ['remote add origin ' + this.repo, 
     'add --all', 
     'commit -m "initial commit from generator"', 
     'push -u origin master'] 
    ); 
    } 
    console.log(yosay('I believe we\'re done here.')); 
} 

wyjście następnie sprawia trochę mniej sensu do mnie:

git: 'remote add origin {URL}' is not a git command. See 'git --help'. 
Initialized empty Git repository in /my/project/.git/ 

To sprawia, że ​​myślę, że działają one asynchronicznie, co może być przyczyną, dla której dodanie zdalnego pochodzenia kończy się niepowodzeniem, ale poza tym jestem bardzo zdezorientowany.

Czy istnieje inny sposób, aby generator popychał do git, czy lepiej nie próbować zautomatyzować początkowego popychania?

EDIT:

Running każdej komendy, jak własnym spawnCommand() nie działa.

this.spawnCommand('git', ['init']); 
this.spawnCommand('git', ['remote add origin ', this.repo]); 
this.spawnCommand('git', ['add --all']); 
this.spawnCommand('git', ['commit -m "initial commit from generator"']); 
this.spawnCommand('git', ['push -u origin master']); 

wyjściowa:

error: invalid key: pager.remote add origin 
error: invalid key: pager.add --all 
error: invalid key: alias.remote add origin 
error: invalid key: alias.add --all 
error: invalid key: pager.commit -m "initial commit from generator" 
error: invalid key: pager.push -u origin master 
Initialized empty Git repository in /my/project/.git/ 
error: invalid key: alias.commit -m "initial commit from generator" 
error: invalid key: alias.push -u origin master 
git: 'remote add origin ' is not a git command. See 'git --help'. 
git: 'push -u origin master' is not a git command. See 'git --help'. 
git: 'add --all' is not a git command. See 'git --help'. 
git: 'commit -m "initial commit from generator"' is not a git command. See 'git --help'. 

zaczynam myśleć, to nie może być najlepszym sposobem, aby to zrobić.

Odpowiedz

7

Użyj jednego this.spawnCommandSync() na polecenie git, które chcesz uruchomić.

this.spawnCommandSync('git', ['init']); 
this.spawnCommandSync('git', ['remote', 'add', 'origin', this.repo]); 
this.spawnCommandSync('git', ['add', '--all']); 
this.spawnCommandSync('git', ['commit', '-m', '"initial commit from generator"']); 
this.spawnCommandSync('git', ['push', '-u', 'origin', 'master']); 

Tablica jest tablicą argumentów łańcuchowych. To jest ten sam interfejs co node.js spawn - bez magii innej niż owijanie krzyżowego odrodzenia dla obsługi Windows.

this.spawnCommand() jest asynchroniczny, więc jeśli go używasz, musisz kontrolować przepływ, aby polecenia nie były uruchamiane w tym samym czasie i być może w niewłaściwej kolejności. Biorąc pod uwagę, że jest to generator typu yoman, użycie polecenia synchronicznego jest zwykle wystarczająco dobre.

+0

Wyjście z tego wyrzucił kilka błędów. Wydawało się, że polecenia również się nie sprawdzają? –

+0

Zmieniono moją odpowiedź, podając więcej szczegółów. –

+0

Dziękuję za wyjaśnienia. Nie mogłem dostać async.series do pracy, choć wydaje się, że byłoby to najczystsze rozwiązanie. Skończyło się na tym, że używałem takich wywołań zwrotnych: this.spawnCommand ('git', ['command']). On ('close', function() {}); Niezbyt czysto, ale biorąc pod uwagę ustaloną liczbę kroków, wydawało się, że jest w porządku. Dziękuję za pomoc! –

Powiązane problemy