【架构师(第十八篇)】脚手架之项目模板的安装

2022-12-10 13:32:46 浏览数 (1)


执行命令

utilsutilslibindex.js 模块下新建两个方法

代码语言:javascript复制
/**
 * @description: 封装一个 spawn 方法,兼容 mac 和 windows
 * windows : cp.spawn('cmd',['/c','node','-e',code],{})
 * mac : cp.spawn('node', ['-e', code],{})
 * @param {*} command 'cmd'
 * @param {*} args ['/c','node','-e',code]
 * @param {*} options {}
 * @return {*} cp.spawn(cmd, cmdArgs, options)
 */
function spawn(command, args, options = {}) {
  const cp = require('child_process');
  const win32 = process.platform === 'win32';
  const cmd = win32 ? 'cmd' : command;
  const cmdArgs = win32 ? ['/c'].concat(command, args) : args;
  return cp.spawn(cmd, cmdArgs, options);
}

/**
 * @description: 异步执行命令
 * @param {*} 参数同上
 * @return {*}
 */
function execAsync(command, args, options = {}) {
  return new Promise((resolve, reject) => {
    const p = spawn(command, args, options)
    p.on('error', e => {
      reject(e)
    })
    p.on('exit', c => {
      resolve(c)
    })
  })
}

module.exports = {
  spawn,
  execAsync
};

模板安装

commandsinitlibindex.js

在命令的执行阶段添加安装模板的方法。

代码语言:javascript复制
/**
   * @description: 命令的执行阶段
   * @param {*}
   * @return {*}
   */
  async exec() {
    try {
      // 1.准备阶段
      const projectInfo = await this.prepare();
      if (projectInfo) {
        this.projectInfo = projectInfo;
        log.verbose('


	

0 人点赞