08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / build / module-conf.js
caibinghong on 15 Nov 2021 用,glob 库代替 查找文件

const fs = require("fs");
var chalk = require('chalk')
var glob = require('glob')

const packageConfig = require('../package.json')
const projectName = packageConfig.name == 'hi-vui-template' ? 'project' : packageConfig.name;
// 获取所有的moduleList
var moduleList = []
// console.time()
moduleList = glob.sync(`./${projectName}/!(dist|node_modules|build)/**/package.json`);// 这个执行比较快 114.811ms
for(let i=moduleList.length-1;i>=0;i--){
  moduleList[i]= moduleList[i].replace(/\/package\.json/gi,'')
}
// console.timeEnd()
// console.log(moduleList);

/*
// 需要忽略的文件夹
const ignores = 'dist,node_modules,build'.split(',')
function getAllModule(dir) { 
  var files = fs.readdirSync(dir), isFind = false;
  //判断是否有模块存在
  for (var i = 0; i < files.length; i++) {
    if (ignores.includes(files[i])) continue;
    if (files[i] == "package.json") {  
      moduleList.push(dir);
      isFind = true;
      break;
    }
  }
  if (isFind == false) {
    for (var i = 0; i < files.length; i++) {
      if (ignores.includes(files[i])) continue
      var file = dir + '/' + files[i]
      var stat = fs.statSync(file)
      if (stat.isDirectory() == true) {
        getAllModule(file);
      }
    }
  }
}
// console.time()
// console.log('指定目录:',projectName)
getAllModule('./'+projectName);//指定目录 开始搜索模块   这个执行比较慢 1.829ms
// console.timeEnd()
*/



// 检测是否在输入的参数是否在允许的list中
var checkModule = function (module) {
  var module = module || process.env.MODULE_ENV;
  // 检查moduleList是否有重复
  var hash = {}
  var repeatList = []
  for (var l = 0; l < moduleList.length; l++) {
    if (hash[moduleList[l]]) {
      repeatList.push(moduleList[l])
    }
    hash[moduleList[l]] = true
  }
  if (repeatList.length > 0) {
    console.log(chalk.red('moduleList 有重复:'))
    console.log(chalk.red(repeatList.toString()))
    return false
  }
  let result = true
  let illegalParam = ''
  for (let moduleToBuild of module.split(',')) {
    if (moduleList.indexOf(moduleToBuild) === -1) {
      result = false
      illegalParam = moduleToBuild
      break
    }
  }
  if (result === false) {
    console.log(chalk.red('参数错误,允许的参数为:'))
    console.log(chalk.green(moduleList.toString()))
    console.log(chalk.yellow(`非法参数:${illegalParam}`))
  }
  return result
}

// 获取当前要打包的模块列表
function getModuleToBuild() {
  let moduleToBuild = []
  if (process.env.NODE_ENV === 'production') {
    /* 部署态,构建要打包的模块列表,如果指定了要打包的模块,那么按照指定的模块配置入口
     *  这里有个特性,即使参数未传,那么获取到的undefined也是字符串类型的,不是undefined类型
     * */
    if (process.env.MODULE_ENV !== 'undefined') {
      moduleToBuild = process.env.MODULE_ENV.split(',')
    } else {
      // 如果未指定要打包的模块,那么打包所有模块
      moduleToBuild = moduleList
    }
  } else {
    // 开发态,获取所有的模块列表
    moduleToBuild = moduleList
  }
  return moduleToBuild
}

exports.moduleList = moduleList
exports.checkModule = checkModule
exports.getModuleToBuild = getModuleToBuild