node 获取文件夹目录 以及替换指定文件名称内容后并 执行脚本

目前公司项目遇到一个问题 10个相同结构项目同时打包三套环境代码并压缩
故采用如下脚本实现自动化打包

const path = require('path');
const fs = require('fs');
const argv = process.argv;
const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function lsExample() {
  const { stdout, stderr } = await exec('ls');
  console.log('stdout:', stdout);
  console.error('stderr:', stderr);
}
// lsExample();
console.log(argv);
const envMenu = {
  dev: '"https://api-prod"',
  test: '"http://www.baidu.com/test"',
  prod: '"http://www.baidu.com/prod"',
  $$$: '"$"'
};
if (argv.length <= 2) {
  console.log('请指定待处理的模式 node x.js --test');

  return;
}

const replaceFile = function(filePath) {
  fs.readFile(filePath, 'utf-8', function(err, data) {
    if (err) {
      return err;
    }
    let str = data.toString();
    // console.log(sourceRegx, targetStr)
    str = str.replace(envMenu.dev, envMenu.$$$);
    str = str.replace(envMenu.test, envMenu.$$$);
    str = str.replace(envMenu.prod, envMenu.$$$);
    // console.log(argv[2].replace('--', ''))
    str = str.replace(envMenu.$$$, envMenu[argv[2].replace('--', '')]);
    fs.writeFile(filePath, str, function(err) {
      if (err) return err;
    });
  });
};
console.log(process.cwd());
fs.readdir(process.cwd(), function(err, files) {
  files.map(async item => {
    const filedir = item + '/config/prod.env.js';
    fs.stat(filedir, async function(eror, stats) {
      if (eror) {
        // console.warn('获取文件stats失败');
      } else {
        var isFile = stats.isFile(); //是文件
        // var isDir = stats.isDirectory(); //是文件夹
        if (isFile) {
          
          console.log(filedir); // 读取文件内容
          // var content = fs.readFileSync(filedir, 'utf-8');
          // console.log(content);
          replaceFile(filedir, envMenu.dev, envMenu.test);
          const { stdout, stderr } = await exec(`cd ./${item} && npm run build`);
          console.log('stdout:', stdout);
          console.error('stderr:', stderr);
        }
        // if (isDir) {
        //   fileDisplay(filedir); //递归,如果是文件夹,就继续遍历该文件夹下面的文件
        // }
      }
    });
    // const txt = await fs.readFileSync(item + '/config/prod.env.js');
    // console.log(txt);
  });
});
// print('./').catch(console.error);

你可能感兴趣的:(node)