UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

279 lines (240 loc) 9.86 kB
'use strict'; const path = require('path'); const fileHelper = require('./../fileHepler'); const basePath = require('./../path'); const clog = require('./../clog'); const buildTemplateDirectory = basePath.buildTemplateDirectory; const entryDirectory = basePath.entryDirectory; const execSync = require('child_process').execSync; const template = require('./../lib/template'); const replaceCss = require('./copy.css'); const utils = require('./../lib/utils'); const os = require('os'); const { beautifyFile, logsLine, getParams } = utils; let type = process.env.type || 'test'; const service = process.env.service || 'serve'; /** * @description 拷贝layout目录 */ const copyLayout = ()=>{ let layout = `${buildTemplateDirectory}/layout`; let toLayout = `${basePath.srcDirectory}/layout`; fileHelper.copySync(layout, toLayout); clog(`拷贝【Layout】完成,目录:${fileHelper.getPlatformSurePath(toLayout)}`, 'green') }; /** * @description 更新首页模版 */ const createIndexHtml = ()=>{ const htmlConfig = require('./../lib/html.config'); let html = template(`${buildTemplateDirectory}/coder/index.txt`, htmlConfig); //html = beautifyFile(html, 'html_beautify'); html = html.replace('baiduBMapGLLib', htmlConfig.baiduBMapGLLib); fileHelper.writeFileSync(`${entryDirectory}/index.html`, html); clog(`创建【public/index.html】完成,路径:${fileHelper.getPlatformSurePath(`${basePath.entryDirectory}/index.html`)}`, 'green') }; /** * @description 创建公共页面 */ const initViewsPack = ()=>{ utils.logsLine(clog); clog(`开始创建公共页面`, 'cyanBG'); utils.logsLine(clog); let viewsPackPath = fileHelper.getPlatformSurePath(`${basePath.rootDir}/usePack.js`); let templatePath = fileHelper.getPlatformSurePath(`${basePath.rootDir}/build/template/coder/viewsPack.txt`); //生成路径 let schemasPath = fileHelper.getPlatformSurePath(`${basePath.rootDir}/schemas`); let routerPath = fileHelper.getPlatformSurePath(`${basePath.rootDir}/src/router/modules`); //模版路径 let viewsRouterPath = fileHelper.getPlatformSurePath(`${basePath.rootDir}/src/viewsPack/router`); let viewsSchemasPath = fileHelper.getPlatformSurePath(`${basePath.rootDir}/src/viewsPack/schemas`); let existFileArray = []; let successFileArray = []; if(fileHelper.existFileSync(viewsPackPath)) { let data = require(viewsPackPath); data.map(item=>{ let schemasTempPath = `${schemasPath}/${item}.js`; let routerTempPath = `${routerPath}/${item}.js`; if(fileHelper.existFileSync(schemasTempPath) || fileHelper.existFileSync(schemasTempPath) ) { existFileArray.push({ schemas: schemasTempPath, router: routerTempPath }) } else { successFileArray.push({ schemas: schemasTempPath, router: routerTempPath }) let schemas = beautifyFile(template(templatePath, { schemas: true, fileName: item })); let router = beautifyFile(template(templatePath, { router: true, fileName: item })); fileHelper.writeFileSync(schemasTempPath, schemas) fileHelper.writeFileSync(routerTempPath, router) } }); } if (successFileArray.length > 0) clog(`成功创建公共页面包含,${os.EOL}${JSON.stringify(successFileArray, null, 2)}`, 'green'); if (existFileArray.length > 0) clog(`如需重新生成存在的页面,需要自行删除页面路径再重启动服务即可,已存在公共页面包含:${os.EOL} ${JSON.stringify(existFileArray, null, 2)}`, 'red'); utils.logsLine(clog, 'end') } /** * @description 替换vue cli server * "@vue/cli-service": "4.4.4", */ const replaceVueCliServer = () => { let params = getParams(); if ((params.NODE_ENV === 'development' || params.service === 'serve') && params.domain && /^(http:\/\/|https:\/\/)(.+)\.(.+)$/.test(params.domain) ) { let res = fileHelper.readFileSync(basePath.buildTemplateDirectory + '/coder/serve.js'); res = res.replace('@{domain}@', params.domain); let servePath = basePath.rootDir + './node_modules/@vue/cli-service/lib/commands/serve.js'; fileHelper.writeFileSync(servePath, res); clog(`替换【serve】文件,路径:${fileHelper.getPlatformSurePath(servePath)}`, 'green'); } }; const permissionCopy=(type)=>{ let toPath = basePath.srcDirectory + '/directive/permission/permission.js'; if (type === '_s') toPath = basePath.srcDirectory + '/store/modules/permission.js'; if (type === '_u') toPath = basePath.srcDirectory + '/utils/permission.js'; let fromPath = basePath.buildTemplateDirectory + `/permission/permission${type}.js`; fileHelper.copySync(fromPath, toPath) }; const init = ()=>{ clog('创建打包使用相关文件', 'cyanBG'); utils.logsLine(clog, 'start'); let params = getParams(); //是否启用layout自动更新 if(params.cover) { copyLayout(); } //是否开启permissions相关文件自动更新 if (params.permissionsCover) { permissionCopy('_d');//复制指令 permissionCopy('_s');//复制动态路由生产文件 permissionCopy('_u');//复制权限判断函数 } //是否开启TagsView相关文件自动更新 if (params.permissionsTagsViewCover) { let tagsViewName = 'tagsView.js'; let fromTagsView = basePath.buildTemplateDirectory + '/permission/' + tagsViewName; let toStore = basePath.srcDirectory + '/store/modules/' + tagsViewName ; fileHelper.copySync(fromTagsView, toStore) } //根据环境创建对应的setting let arg = utils.getArgv(); //业务库模式 if(arg.length >= 1) { //供货商模式 if(arg[1] === 'supplier'){ const fromSettings = path.resolve(`./.env.settings.supplier`); const toSettings = path.resolve('./settings.js'); fileHelper.copySync(fromSettings, toSettings); clog(`根据环境创建【Settings】【${type}】并完成`, 'green'); clog(`配置路径:${toSettings}`, 'green'); } //saas if(arg[1] === 'saas'){ const fromSettings = path.resolve(`./.env.settings.saas`); const toSettings = path.resolve('./settings.js'); fileHelper.copySync(fromSettings, toSettings); clog(`根据环境创建【Settings】【${type}】并完成`, 'green'); clog(`配置路径:${toSettings}`, 'green'); } //有配置项目标识模式 else if(arg[1]) { const fromSettings = path.resolve(`./.env.settings.${type}`); const toSettings = path.resolve('./settings.js'); let str = fileHelper.readFileSync(fromSettings)//partner-customer str = str.replace(/(partner-stat)|(partner-customer)/, arg[1]); fileHelper.writeFileSync(toSettings, str); clog(`根据环境创建【Settings】【${type}】并完成`, 'green'); clog(`配置路径:${toSettings}`, 'green'); } //未设置项目标识模式 else { const fromSettings = path.resolve(`./.env.settings.${type}`); const toSettings = path.resolve('./settings.js'); fileHelper.copySync(fromSettings, toSettings); clog(`根据环境创建【Settings】【${type}】并完成`, 'green'); clog(`配置路径:${toSettings}`, 'green'); } } //原来生产配置文件 else { const fromSettings = path.resolve(`./.env.settings.${type}`); const toSettings = path.resolve('./settings.js'); let toPreviewDevUrl = null; if(fileHelper.existFileSync(toSettings)) { toPreviewDevUrl = require(toSettings).previewDevUrl; } //editx特有字段 if(toPreviewDevUrl){ let fromSettingsStr = fileHelper.readFileSync(fromSettings); const fromPreviewDevUr = '/devs/?xsiteid=a3e8b499a07507a2&template_id=tpQIDtj51nen2X1-G3SN1&page_id=pgFBDrXzt7f0pHWJYfNeM&t=1678955416089'; fromSettingsStr = fromSettingsStr.replace(fromPreviewDevUr,toPreviewDevUrl); fileHelper.writeFileSync(toSettings, fromSettingsStr); } else { fileHelper.copySync(fromSettings, toSettings); } clog(`根据环境创建【Settings】【${type}】并完成`, 'green'); clog(`配置路径:${toSettings}`, 'green'); } //创建页面模板页面 createIndexHtml(); //检查项目文件是否初始化 const library = require('./library'); library(null, true); //加载插件公共页面 initViewsPack(); //替换vue cli server replaceVueCliServer(params); //拷贝模块和生成自动程序(npm run coder) execSync(`cross-env SERVICE=${params.service} gulp`, {stdio: 'inherit'}); //生成自动程序 //execSync('npm run coder', {stdio: 'inherit'}); //创建动态表单 require('./../form/update'); //当前打包环境 let done = basePath.rootDir + '/env.current.json'; fileHelper.writeFileSync(done, JSON.stringify(params, null, 2)); //运行打包命令 clog(`${(params.NODE_ENV === 'production' || params.service === 'build') ? '打包开始' : '启动本地开发服务器'}`, 'cyanBG'); utils.logsLine(clog); let cmdString = `vue-cli-service ${params.service}`; if (params.watch) cmdString = `${cmdString} --watch`; if (params.service === 'build' || params.NODE_ENV === 'production') { cmdString = `${cmdString} --minimize`; } clog(`执行命令【${cmdString}】`, 'green'); utils.logsLine(clog, 'start'); execSync(cmdString, {stdio: 'inherit'}); if (params.service === 'build' || params.NODE_ENV === 'production') { utils.logsLine(clog); clog(' 打包完成', 'cyanBG'); utils.logsLine(clog); } //是否进行CSS文件替换 if(service === 'build') { //replaceCss(params) } //保存正式打包数据 if(params.type === 'build' || params.NODE_ENV === 'production') { execSync('node ./build/commands/saveLogs.js', {stdio: 'inherit'}); } }; init();