在Yeoman生成器中安装yarn / npm后运行代码

问题描述

我正在编写一个Yeoman Generator,希望它在安装所有项目依赖项后完成所选的包管理器后能够运行此this.conclude任务(仅作答)。

来自Yeoman website

(...)Yeoman使用运行循环。

运行循环是具有优先级支持的队列系统。我们使用Grouped-queue模块来处理运行循环。

优先级在您的代码中定义为特殊的原型方法名称。当方法名称与优先级名称相同时,运行循环会将方法推入此特殊队列。如果方法名称与优先级不匹配,则将其推入认组。

const Generator = require('yeoman-generator');

const {
  writePckg,writeEntries,writeConfig,writeAssets,} = require('./fileWrites');

const prompts = require('./prompts/index');

const { conclude } = require('./replies');

module.exports = class extends Generator {
  constructor(args,opts) {
    super(args,opts);

    // writing
    this.writePckg = writePckg.bind(this);
    this.writeParcelEntries = writeEntries.bind(this);
    this.writeConfigFiles = writeConfig.bind(this);
    this.writeAssets = writeAssets.bind(this);

    // ending
    this.conclude = conclude.bind(this);
  }

  async prompting() {
    this.answers = await this.prompt(remainingPrompts);
  }

  writing() {
    this.writePckg();
    this.writeParcelEntries();
    this.writeConfigFiles();
    this.writeAssets();
  }

  installing() {
    const { appName,yarn } = this.answers;
    this[`${yarn ? 'yarnInstall' : 'npmInstall'}`](null,{},{ cwd: appName });
  }

  ending() {
    this.conclude();
  }
};

我期望有一种更简单的延迟循环的方式,以便结论仅在安装依赖项后运行。因此,我尝试了其他Generator方法spawnCommand,但它发回了此ENOENT错误

// ...

  installing() {
    const done = this.async();
    const { appName,yarn } = this.answers;

    const child_process = this.spawnCommand(
      `${yarn ? 'yarn' : 'npm'}`,['install'],{
        cwd: appName,},);

    child_process.on('error',err => console.log(err));
    child_process.on('close',done);
  }

  ending() {
    this.conclude();
  }
};
Error: spawn C:\WINDOWS\system32\cmd.exe ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
    at onErrorNT (internal/child_process.js:469:16)
    at processticksAndRejections (internal/process/task_queues.js:84:21) {   
  errno: 'ENOENT',code: 'ENOENT',syscall: 'spawn C:\\WINDOWS\\system32\\cmd.exe',path: 'C:\\WINDOWS\\system32\\cmd.exe',spawnargs: [ '/d','/s','/c','"yarn ^"install^""' ]
}
Error: Promise rejected with value: -4058
# ...

关于如何实现此目标的任何建议?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)