gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
257 lines (219 loc) • 9.01 kB
JavaScript
;
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可以设置项目类型参数
//projectType:项目类型
let [projectType] = utils.getArgv();
if(projectType) params['platform'] = projectType;
else params['platform'] = 'jufubao';//与本地控制上传oss环境判断使用
//多域名设置部署(根据项目类型使用不同项目文件)
if(projectType) {
const fromSettings = path.resolve(`./.env.settings.${projectType}`);
const toSettings = path.resolve('./settings.js');
if(!fileHelper.existFileSync(fromSettings)) {
clog(`配置文件不存在,文件路径=>【${fromSettings}】`, 'red');
process.exit(-1);
}
//创建项目文件
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();