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