【nodejs脚本】为文件夹中的所有node项目执行命令 npm install 并收集error日志

目录 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();
相关推荐
Hyyy16 小时前
普通前端续命周报——第1周
前端·javascript
KaMeidebaby16 小时前
卡梅德生物技术快报|抗独特型抗体开发:半抗原检测技术瓶颈拆解,抗独特型抗体开发工程化实践
前端·数据库·人工智能·其他·百度·新浪微博
2501_9400417416 小时前
纯前端创意交互:五款全新实用工具与视觉应用生成指南
前端·交互
刀法如飞16 小时前
《道德经》简单解说版-第 2 章:天下皆知美之为美
前端·后端·面试
发现一只大呆瓜18 小时前
超全 Vite 性能优化指南:网络、资源、预渲染三维落地方案
前端·面试·vite
IT_陈寒19 小时前
Vue的computed属性怎么突然不更新了?
前端·人工智能·后端
智商不够_熬夜来凑19 小时前
【Picker】单选多选
前端·javascript·vue.js
米饭不加菜19 小时前
Typora 原生流程图语法完全指南(Flowchart.js)
前端·javascript·流程图
scan72419 小时前
langgraphy条件边
前端·javascript·html
冰小忆20 小时前
类变量在继承场景下的初始化规则是怎样的?
java·前端·数据库