2016-04-20 45 views
4

我正在學習Yeoman,並得到了很遠,這是很好的:),但我現在在我的發電機,我想爲我的新建立一個VHOST點項目。產卵命令作爲sudo在NPM/Yeoman

我通常創建一個VHOST的方式是在/etc/apache2/sites-available/中創建* .conf文件,運行sudo a2ensite new-site,最後是sudo service apache2 reload

我該如何使用generator.spawnCommand()(或其他可行的方法)來運行我的sudo命令?我假設用戶需要輸入他的密碼才能運行命令。

請注意,我已經嘗試了sudo的NPM包,但它只是靜靜地失敗,甚至與設在https://www.npmjs.com/package/sudo

+0

我的猜測是Yeoman吞下輸出,這就是爲什麼你永遠不會看到密碼提示。您可以嘗試在/ etc/sudoers中設置您的帳戶,如下所述,這將啓用「無密碼」sudo:http://askubuntu.com/questions/470383/how-to-avoid-prompt-password-for-sudo –

+0

@ TudorIlisoi謝謝,但因爲我不是唯一一個會使用這個生成器的人,所以如果用戶在使用它之前不需要做任何特別的事情,我更喜歡它。我正在考慮在最後留下一條消息,明確說明要運行哪些命令來完成安裝。 – powerbuoy

+0

好吧,也許你可以嘗試'spawnCommandSync'而不是'spawnCommand'並添加一些事件處理程序來檢查結果https://github.com/yeoman/generator/issues/545 –

回答

0

也許我誤解了一些示例代碼,但下面簡單的代碼工作對我罰款:

var generators = require('yeoman-generator'); 
var execSync = require('child_process').execSync; 

module.exports = generators.Base.extend({ 
    touch: function() { 
    execSync('sudo touch /tmp/test-sudo', { 
     stdio: 'inherit' 
    }); 
    } 
}); 
+0

試試這個,我和我一樣'generator.spawnCommand()':「powerbuoy不在sudoers文件中,將會報告這個事件。 錯誤:命令失敗:sudo touch test」。即使這可以通過將我添加到「sudoers文件」(不管是什麼:P)來解決,如果用戶在運行生成器之前不需要做任何特殊的事情,我更喜歡它。 – powerbuoy

+0

@powerbuoy,但使用'sudo'則意味着使用'sudoers'文件。除非用戶對默認值滿意,否則他(或其管理員)必須修改該文件。如果用戶不被允許運行sudo,那麼我看不到其他方式,但是編輯'/ etc/sudoers'。 –

+0

好的,但如果我手動運行'sudo touch test.txt',我會收到我的密碼,然後創建文件。當我從我的發生器運行它時,我收到上面的消息,沒有任何反應。我希望前者在沒有我編輯文件的情況下發生。也許這是不可行的,但我寧願在最後留下一條消息,告訴用戶要運行的命令(我現在正在執行此操作)。 – powerbuoy