问题描述
我正在编写一个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 (将#修改为@)