我正在Yeoman generator
进行安装,安装了CraftCMS
并预先加载了一些自定义设置和文件,以加快开发速度。
我要指出脚本执行composer create-project craftcms/craft
的位置。对我来说,下一个合乎逻辑的步骤是将cd
放入文件夹并运行工艺安装程序craft install
。
我只是不知道如何让代码行同步运行。目前,它同时运行所有程序,这当然会出错。
这是我的代码:
'use strict';
const generator = require('yeoman-generator');
const chalk = require('chalk');
const yosay = require('yosay');
let init;
module.exports = class extends generator {
async initializing() {
this.log(yosay(chalk.blue('Hey!') + '\n' + 'Welcome to the Visited Installer!' + '\n\n' + 'Let\'s start a project together!'));
init = await this.prompt([{
type: 'input',
name: 'name',
message: 'What is the name of your new project?',
}]);
this.log(yosay(chalk.blue(init.name) + ', Great!' + '\n\n' + 'Let\'s start by downloading the latest version of CraftCMS.'));
}
install() {
this.spawnCommand('composer', ['create-project', 'craftcms/craft', init.name]);
this.log(yosay(chalk.blue('Done!') + '\n\n' + 'The next step is installing CraftCMS, Don\'t worry, I\'ve got this!'));
this.spawnCommand('cd', [init.name]);
this.spawnCommand('craft', ['install']);
}
};
我尝试阅读有关JS中的异步和同步编程的信息,但是由于我不是英语母语者,而且我对JS的使用不多(我大多使用PHP),因此我很难理解其背后的逻辑。
更新:我更改了帖子,将异步和同步混在了脑海中。问题仍然存在,我的install()
函数中的所有内容都同时运行:this.log
并不等待this.spawnCommand
完成下载和设置文件。.
答案 0 :(得分:0)
问题在于spawnCommand本质上是异步的,它无法为您提供任何等待命令完成的方法。它不需要回调参数,也不会返回promise。
但是,还有另一个命令:spawnCommandSync,该命令保证同步进行工作。试试看。