3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以使用execSync
代替exec
:
const {execSync} = require('child_process');
以下是有關(guān)此功能的主要文檔:NodeJs Docs
具體說(shuō)明:
child_process.execSync() 方法通常與 child_process.exec() 相同,只是該方法在子進(jìn)程完全關(guān)閉之前不會(huì)返回。當(dāng)遇到超時(shí)并發(fā)送 killSignal 時(shí),該方法將在進(jìn)程完全退出之前不會(huì)返回。如果子進(jìn)程攔截并處理了 SIGTERM 信號(hào)并且沒(méi)有退出,則父進(jìn)程會(huì)一直等到子進(jìn)程退出。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是一個(gè)可以使用鎖或信號(hào)量的經(jīng)典案例。
只需在所需行之前鎖定執(zhí)行,然后將其刪除。
參考this for locks in js - How to implement a lock in JavaScript

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
您可以使用 util 模塊中的 promisify 將 async exec 函數(shù)轉(zhuǎn)換為 promise,然后您可以使用 await exec 以使其顯示為同步執(zhí)行。
const util = require('util');
const exec = util.promisify(require('child_process').exec);
然后,您可以將代碼包裝在這樣的函數(shù)中:
async function init(){
//your code
await exec("create-react-app " + project.name, { cwd });
//...
}
init();
對(duì)于像這樣的簡(jiǎn)單腳本,execSync 實(shí)際上可能更容易,但在其他情況下您可能會(huì)發(fā)現(xiàn)異步版本更好。
添加回答
舉報(bào)