• 【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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
  • 相关阅读:
    Python-大数据分析之常用库
    羊大师:羊奶的多元价值,从餐桌到保健,一奶多用
    工具篇之Axure RP 10的使用
    Visual Studio配置OpenCV(保姆及教程)
    整理C++继承、多继承、菱形继承、虚继承
    中秋,在公司赏月
    2023年Java毕业设计题目如何选题?Java毕业设计选题大全
    【ASP.NET小白零基础入门】从0部署ASP.NET开发环境,并成功运行一个汉服图片管理系统
    线程中不安全的集合
    今天起将正式开始更新JAVA和PYTHON的相关知识
  • 原文地址:https://blog.csdn.net/qq_36649716/article/details/133970223