目录 im 下有很多的node项目,我需要批量为这些项目执行 npm install,另外npm的error信息需要单独收集至log文件中
var fs = require('fs');
var util = require('util');
var exec = util.promisify(require('child_process').exec);
var projectsDirectory = '.';
var logFilePath = './npm_install_errors.log'; // 更改为您的日志文件路径
var br = `⬆⬆⬆ ---------------------------------------------------------------- ⬆⬆⬆ \n\n`;
async function runNpmInstall(projectDir) {
try {
var errorContent = '';
var { stdout, stderr } = await exec('npm install', { cwd: projectDir });
console.log(`在 ${projectDir} 执行 'npm install' 完成。`);
console.log(br);
if (stdout) console.log(stdout);
if (stderr) {
errorContent = `在 ${projectDir} 执行 'npm install' 时出错: >>> \n ${stderr} \n` + br;
console.error( errorContent );
// 将错误信息写入日志文件
fs.appendFile(logFilePath, errorContent, (err) => {
if (err) console.error(`无法追加到日志文件: ${err}`);
});
}
} catch (error) {
errorContent = `在 ${projectDir} 执行 'npm install' 时出错: >>> \n ${error.message} \n` + br;
// 将错误信息追加到日志文件
fs.appendFile(logFilePath,errorContent, (err) => {
if (err) console.error(`无法追加到日志文件: ${err}`);
});
}
}
async function main() {
try {
// 读取目录下的所有文件夹
var projectFolders = await fs.promises.readdir(projectsDirectory, { withFileTypes: true });
// 遍历每个文件夹
for (var folder of projectFolders) {
if (folder.isDirectory()) {
var projectDir = `${projectsDirectory}/${folder.name}`;
var packageJsonPath = `${projectDir}/package.json`;
// 检查是否存在 package.json 文件
if (fs.existsSync(packageJsonPath)) {
console.log(`在 ${projectDir} 执行 'npm install'...`);
await runNpmInstall(projectDir);
} else {
console.log(`在 ${projectDir} 找不到 package.json 文件,跳过。\n\n`);
}
}
}
} catch (error) {
var errorContent = `发生错误: ${error.message} \n` + br;;
// 将错误信息追加到日志文件
fs.appendFile(logFilePath, errorContent, (err) => {
if (err) console.error(`无法追加到日志文件: ${err}`);
});
}
}
main();