1 Star 0 Fork 0

Raisr / rfe-env-configs

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
index.min.js 4.01 KB
一键复制 编辑 原始数据 按行查看 历史
#!/usr/bin/env node
"use strict";const t=require("fs"),r=require("path"),e=require("cac")(),i=require("chalk"),n={tempConfigPath:[],templateDirPath:[],tempStaticDir:[],tempDefaultConfigPath:[],root:[],envDir:void 0,envOpts:{},targetStaticDir:[],targetConfigPath:[],configFomatter:function(t){return`${JSON.stringify(t,null," ")}`}},o=()=>r.join(process.cwd(),...n.root);function a(t=[]){return r.join(o(),...t)}function c(t,r){return s(r)&&s(t)?(Object.keys(r).forEach(e=>{t[e]=c(t[e],r[e])}),t):r}function s(t){return"[object Object]"===Object.prototype.toString.call(t)}function g(e,n){let o=e;n.forEach(e=>{o=r.join(o,e),t.existsSync(o)&&t.statSync(o).isDirectory()||(console.log(i.green(`生成文件夹:${o}`)),t.mkdirSync(o))})}e.command("run","复制模版文件,合并配置文件到目标目录").option("--env <env>","模板环境").option("--root <root>","根目录相对地址").option("--templateDirPath <templateDirPath>","模板根文件夹路径").option("--tempDefaultConfigPath <tempDefaultConfigPath>","模板根文件夹下的公共配置文件路径").option("--tempConfigPath <tempConfigPath>","模板文件相对模板文件夹路径").option("--tempStaticDir <tempStaticDir>","模板静态文件夹相对环境目录的路径").option("--targetConfigPath <targetConfigPath>","配置文件的目标路径").option("--targetStaticDir <targetStaticDir>","静态文件目标目录路径").action(e=>{delete e["--"],function(e){let o={};const s=a([".rconf.js"]);t.existsSync(s)&&(o=require(s));const f=a(["package.json"]);let l={};t.existsSync(f)&&(l=require(f));if((o=Object.assign({},o,l.rconf||{},e)).configFomatter&&"function"!=typeof o.configFomatter)throw new Error("configFomatter 必须是函数");o.configFomatter=o.configFomatter||n.configFomatter,Object.keys(n).forEach(t=>{const r=o[t];["envDir","configFomatter"].includes(t)?n[t]=r:n[t]=function(t,r){if(!r)return[];if(Array.isArray(r))return r;if("string"==typeof r)return r.split("/").filter(t=>!!t);throw new Error(`请为${t}配置字符串或者字符数组`)}(t,r)}),n.envOpts=o.opts||{},n.envDir=o.env||{},function(e,o){try{!function(){if(Array.isArray(n.targetStaticDir)&&n.targetStaticDir.length>0){const e=t.readdirSync(a(n.templateDirPath)),o=[];Array.isArray(e)&&e.forEach(e=>{const i=a([...n.templateDirPath,e]);if(t.statSync(i).isDirectory()){const e=r.join(i,...n.tempStaticDir);t.existsSync(e)&&t.statSync(e).isDirectory()&&o.push(t.readdirSync(e))}});const c=o.reduce((t,r)=>t.concat(r),[]);c.forEach(r=>{const e=a([...n.targetStaticDir,r]);r&&t.existsSync(e)&&(console.log(i.red(`删除文件:${e}`)),t.unlinkSync(e))})}if(Array.isArray(n.targetStaticDir)&&n.targetStaticDir.length>0){const r=a(n.targetConfigPath);Array.isArray(n.targetConfigPath)&&n.targetConfigPath.length&&t.existsSync(r)&&(console.log(i.red(`删除文件:${r}`)),t.unlinkSync(r))}}(),function(r,e={}){if(!Array.isArray(n.targetConfigPath)||!n.targetConfigPath.length)return void console.log(i.yellow("无配置文件输出"));let o={},s={};const f=a([...n.templateDirPath,...n.tempDefaultConfigPath]);t.existsSync(f)&&t.statSync(f).isFile()&&(s=require(f));const l=a([...n.templateDirPath,r,...n.tempConfigPath]);t.existsSync(l)&&t.statSync(l).isFile()&&(o=require(l));const y=function(...t){return t.reduce(c,{})}(s,o,e),p=[...n.targetConfigPath];p.pop(),g(a(),p);const u=a(n.targetConfigPath);console.log(i.green(`生成文件: ${u}`)),t.writeFileSync(u,n.configFomatter(y))}(e,o),function(e){if(!Array.isArray(n.tempStaticDir)||!n.tempStaticDir.length)return void console.log(i.yellow("无静态文件需要拷贝"));const o=a([...n.templateDirPath,e,...n.tempStaticDir]);if(!t.existsSync(o)||!t.statSync(o).isDirectory())return console.log(i.yellow(`${e} 无静态文件输出`));const c=t.readdirSync(o);Array.isArray(c)&&c.forEach(e=>{const c=r.join(o,e);g(a(),n.targetStaticDir);const s=a([...n.targetStaticDir,e]);console.log(i.blue(`复制文件: ${c}`)),console.log(i.green(`生成文件: ${s}`)),t.copyFileSync(c,s)})}(e)}catch(t){console.log(t)}}(n.envDir||"",n.envOpts)}(e)}),e.help(),e.version("1.0.2"),e.parse();
JavaScript
1
https://gitee.com/rasir/rfe-env-configs.git
git@gitee.com:rasir/rfe-env-configs.git
rasir
rfe-env-configs
rfe-env-configs
master

搜索帮助