const program = require("commander"); const tools = require("./tools"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const paths = require("../config/paths"); const myConfig = require("../src/global"); program .version("0.1.0") .usage("[options] ") .option("-b, --build", "是否是打包输出到dist") .option("-a, --all", "是否操作全部") .option("-d, --dev", "开发") .option("-p, --pro", "生成") .option("-n, --nginx", "打包到nginx") .option("-m, --map", "线上环境是否生成map文件") .parse(process.argv); async function buildOrDev() { let isEnvProduction = process.env.NODE_ENV === "production"; let params = { configEntry: {}, htmls: null, isNginx: program.nginx ? program.nginx : false, CONFIG: program.pro //dev和pro区别配置 ? myConfig.pro //生成 : myConfig.dev, //开发 }; let targetProject; if (program.all) { // 读取pages下面所有构建文件 let allFiles = await tools.getAllBuildFile(); targetProject = Array.isArray(allFiles) ? allFiles : ["login"]; } else { if (program["_name"] === "build") { targetProject = program.args; } else { targetProject = [...new Set([...program.args, "login", "404"])]; } } if (program["_name"] === "build") { if(!program.map){ process.env.GENERATE_SOURCEMAP ='false' } console.log( "启动打包===>", program.pro ? "线上" : "测试", program.nginx ? "打包到nginx" : "打包到项目目录下", program.map ? '生成MAP文件':'不生成MAP文件' ); } else { console.log( "启动本地环境===>", program.pro ? "线上" : "测试", program.nginx ? "打包到nginx" : "打包到项目目录下" ); } console.log(targetProject); /* 设定入口文件 */ targetProject.forEach((item) => { params.configEntry[item] = paths.appPath + "/src/pages/" + item + "/entry/index.tsx"; }); /* 设定html输出 */ params.htmls = targetProject.map((item) => { /* https://www.webpackjs.com/plugins/html-webpack-plugin/ */ return new HtmlWebpackPlugin( Object.assign( {}, { inject: true, title: item, filename:item !== 'login'? `${item}/index.html`:`index.html`, //HashRouter路由将login的HTML单独拿出来放在主目录下 // filename:`${item}/index.html`, //BrowserRouter路由多入口 template: paths.appPath + "/build/index.html", chunks: [item], }, isEnvProduction ? { minify: { removeComments: true, collapseWhitespace: true, removeRedundantAttributes: true, useShortDoctype: true, removeEmptyAttributes: true, removeStyleLinkTypeAttributes: true, keepClosingSlash: true, minifyJS: true, minifyCSS: true, minifyURLs: true, }, } : undefined ) ); }); return params; } module.exports = buildOrDev;