UNPKG

generator-hcj

Version:

HTML/CSS/JavaScript前端开发工作流,适用于互联网金融事业部开发环境

139 lines (129 loc) 4.83 kB
'use strict'; var yeoman = require('yeoman-generator'); var chalk = require('chalk'); var yosay = require('yosay'); var fs = require('fs'); var path = require('path'); var _ = require('lodash'); var currentPath = process.cwd(); var cfgPath = path.join(currentPath, 'hcj-config/basic-conf.js'); var cfg = require(cfgPath); module.exports = yeoman.Base.extend({ initializing: function() { var me = this; var done = this.async(); me.projectFile = 'hcj-config/projects-conf.js'; fs.readFile(me.projectFile, 'utf-8', function(err, data) { me.projectData = data; done(); }); }, prompting: function () { var me = this; var done = this.async(); this.log(yosay( '欢迎使用 ' + chalk.red('HCJ 前端开发工作流') )); this.log(chalk.green('=== 添加项目 ===')); this.createDate = this._getDate(); this.authorName = this.user.git.username + ' ' + '<' + this.user.git.email + '>'; var prompts = [ { name: 'gitName', message: '仓库名称', type: 'list', choices: [ { name: '理财', value: 'finance' }, { name: '保险', value: 'insurance' }, { name: '活动', value: 'activities' } ] }, { name: 'projectType', message: '项目类型:', type: 'list', choices: [ { name: '桌面端', value: 'desktop' }, { name: '移动端', value: 'mobile' } ] }, { name: 'projectName', message: '项目名称:', type: 'input', default: 'project-xxx' }, { name: 'pageName', message: '页面名称:', type: 'input', default: 'index' }, { name: 'pageDesc', message: '页面描述:', type: 'input' } ]; this.prompt(prompts, function (props) { for (var prop in props) { if (props.hasOwnProperty(prop)) { this[prop] = props[prop]; } } this.staticSvrHost = cfg.basic[this.projectType].host.statics; this.pathName = this.gitName == 'activities' ? '' : '/mobile'; done(); }.bind(this)); }, _getDate: function() { var date = new Date(); return date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate(); }, writing: function() { var me = this; var project = this.projectType; var from = path.join('demo', project); var to = cfg[this.projectType].path.src; var done = this.async(); var projectName = me.projectType + ':' + me.projectName; var pageName = projectName + ':' + me.pageName; var data = JSON.parse(me.projectData); var pageExt = me.projectType == 'mobile' ? '.html' : '.ftl'; if(data.indexOf(pageName) !== -1){ me.log(chalk.red(me.projectType + '/' + me.projectName + '/' + me.pageName + '页面已经创建,请勿重复创建!')); }else{ if(data.indexOf(projectName) === -1){ data.push(projectName); } data.push(pageName); data = JSON.stringify(data); data = data.replace(/,/g, ',\n\r').replace(/\[/g, '\[\n\r').replace(/\]/g, '\n\r\]').replace(/(".*?")/g, ' $1'); fs.writeFile(me.projectFile, data, function (err) { if (err) throw err; // 复制模板文件 me.copy(path.join(from, 'srcPages/hcj-demo', 'index.html'), path.join(to['pages'], me.projectName, me.pageName + pageExt)); me.directory(path.join(from, 'srcStyles/hcj-demo'), path.join(to['styles'], me.projectName, me.pageName)); me.directory(path.join(from, 'srcScripts/hcj-demo'), path.join(to['scripts'], me.projectName, me.pageName)); me.directory(path.join(from, 'srcImages/hcj-demo'), path.join(to['images'], me.projectName)); me.log(chalk.green('=== 创建完成 ===')); done(); }); } } });