字符串数组回来为未定义child
我创建一个程序,可帮助快速建立项目。它查询了名的用户,需要的依赖关系,然后创建一个文件夹,应该在它安装依赖。依赖关系是存储在可没有问题,可以访问阵列。然而,在child_process.exec功能的环内,所述阵列元件回来为未定义。下面的代码:
const inquirer = require('inquirer');
const fse = require('fs-extra');
const cp = require("child_process");
const path = require('path');
(function(){
let projectName;
let dependencies;
console.log("Welcome to Node Project Creator.");
inquirer.prompt([{type: String, name: "ProjectName", message: "What would you like to name your project?"}]).then(function(answer){
projectName = answer.ProjectName;
console.log(projectName + " is a great name!");
fse.mkdir(path.join(__dirname, projectName));
console.log("Project folder created.");
inquirer.prompt([{type: String, name: "dependencies", message: "Enter dependencies seperated by spaces."}]).then(function(answer){
if (answer.dependencies){
dependencies = answer.dependencies.split(" ");
console.log("Okay, I will install your dependencies.");
console.log(dependencies);
} else {
console.log("I guess you don't need any dependencies.");
}
try {
process.chdir(path.join(__dirname, projectName));
for (var i = 0; i < dependencies.length; i++){
cp.exec("npm install " + dependencies[i], function(err){
if (err){
console.error(err);
} else {
console.log(dependencies[i] + " installed.");
}
});
console.log("Thank you for using Node Project Creator.");
}
} catch (err){
console.error(err);
}
});
});
})();
回答如下:
你cp.exec()
回调异步调用,当i
已经不< dependencies.length
。尝试let i = 0
使绑定到每个循环值i
。
见http://exploringjs/es6/ch_variables.html#sec_let-const-loop-heads