在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 如何用命令行選擇命令,并且執(zhí)行?

如何用命令行選擇命令,并且執(zhí)行?

首先說下我的項目,是以vue-li3.0為腳手架。在運行服務(wù)和打包改成了指定目錄,也就是說這個項目下會有很多的子項目,每次運行或打包需要指定子項目的名稱,這是背景。所以想法來了:

1.通過命令行列出所有的子項目名稱
2.選擇一個名稱
3.選擇環(huán)境(本地環(huán)境,測試環(huán)境,演示環(huán)境...)
4.選擇運行服務(wù)或打包操作

前面的命令行選擇都可以通過inquirer實現(xiàn),但在選擇命令后如何執(zhí)行命令?
目前我想選擇對應(yīng)的package.json下配置的命令, 如 npm run serve
通過child_process能過執(zhí)行成功,但是看不到運行的輸出結(jié)果了

注: 目前我切換子項目并運行的命令是 npm config set project:name demoName && npm run serve, 每次這么寫有點累,看看大神們有沒有好的實現(xiàn)方法

回答
編輯回答
放開她

看不到輸出結(jié)果是因為你沒有將子進程的輸出重定向到當(dāng)前進程,

這樣寫就好了:

var ls = spawn(_cmd, _args);

    ls.stdout.on('data', data => {
      console.log(`${data}`);
    });

    ls.stderr.on('data', data => {
      console.log(`stderr: ${data}`);
    });

    ls.on('close', code => {
      // console.log(`子進程退出碼:${code}`);
    });
2017年12月11日 12:22
編輯回答
怪痞

首先很感謝@說好的一血呢 提供的方案,我是node渣,最終得以實現(xiàn)

clipboard.png

以下是我實現(xiàn)的代碼

const inquirer = require('inquirer');
const fs = require('fs');
const { spawn } = require('child_process');

try {
    // 列出項目名稱
    fs.readdir('./project', (err, files) => {
        inquirer.prompt([
            {
                type: 'list',
                name: 'project',
                message: '請選擇一個項目',
                choices: files
            },
            {
                type: 'list',
                name: 'dev',
                message: '請選擇運行環(huán)境',
                choices: ['dev','test']
            },
            {
                type: 'list',
                name: 'operate',
                message: '運行服務(wù)還是打包操作?',
                choices: ['serve','build']
            }
        ]).then(v => {
            console.log(v)
            const cmd = process.platform === 'win32' ? 'npm.cmd' : 'npm'
            const args = ['config', 'set', 'test:name', v.project, '&&', 'npm', 'run', v.operate]
            const opts = {
                stdio: 'inherit' // 并入父進程
            }
            const ls = spawn(cmd, args, opts);
        })
    })
} catch (error) {
    console.error(error)
}
2017年5月28日 19:24