fex
Version:
A simple command line interface that helps you develop and test Angularjs project.
97 lines (76 loc) • 3.24 kB
JavaScript
var
fex_vars=require('./vars')
, fex_dir=require('./dirhelper')()
, path = require('path')
, colors = require('colors')
, fs = require('fs-extra')
, compiler=require('./compiler')
, util=require('util')
;
var SupportComponentFolderNames={
'controller':'controllers',
'default':'defaults',
'directive':'directives',
'factory':'factories',
'filter':'filters',
'provider':'providers',
'service':'services'
}
module.exports=function(projectFolder,componentName,componentType,componentRelativeDir) {
//user vars
var user_vars=require(path.join(projectFolder,fex_vars.configFile));
var componentTemplatePath= path.join(fex_dir.templates, user_vars.projectType?user_vars.projectType:'web');
//fex web app conf.json
var conf=require(path.join(componentTemplatePath,'conf.js'));
var componentConfig=conf.components[componentType];
if(!componentConfig){
console.log(colors.red(" ERROR: Unsupport component."));
}
var componentFolderName=SupportComponentFolderNames[componentType];
user_vars['FEXComponentName']=componentName;
user_vars['FEXComponentType']=componentType;
user_vars['FEXComponentFolderName']=componentFolderName;
//has Prefix
var rPrefix=/^\[PREFIX\]/;
if(rPrefix.test(componentConfig.nameFormat)){
var prefix=user_vars['componentPrefix'] ? user_vars['componentPrefix'] : '';
var prefixFormat=componentConfig.nameFormat.replace(rPrefix,prefix);
newComponentName=prefix ? ( componentName[0].toUpperCase()+componentName.slice(1) ) : componentName;
user_vars['FEXComponentFormatName']=util.format(prefixFormat, newComponentName);
}
else{
user_vars['FEXComponentFormatName']=util.format(componentConfig.nameFormat,componentName);
}
//component directory
var componentDir=componentRelativeDir
? path.join(fex_dir.cwd,componentRelativeDir)
: path.join(projectFolder,'coffee',componentFolderName);
fs.ensureDirSync(componentDir);
//copy component coffee script
var componentFileTemplate=path.join(componentTemplatePath,componentConfig.template);
var componentFile=path.join(componentDir,componentName+'.coffee');
if(fs.existsSync(componentFile)){
console.log(colors.error(' ERROR: Component exists!'));
return;
}
fs.copySync(componentFileTemplate,componentFile);
//compile coffee script file
compiler(componentFile,user_vars);
//copy test files
var unitTestFolder=path.join(projectFolder,'tests/unit',componentFolderName,componentName);
if(fs.existsSync(unitTestFolder)){
fs.removeSync(unitTestFolder);
}
fs.ensureDirSync(unitTestFolder);
if(componentConfig.test){
var testScriptTemplate=path.join(componentTemplatePath,componentConfig.test.script);
var testViewTemplate=path.join(componentTemplatePath,componentConfig.test.view);
var testScriptFile=path.join(unitTestFolder,util.format('%s_test.coffee',componentName));
var testViewFile=path.join(unitTestFolder,'index.html');
fs.copySync(testScriptTemplate,testScriptFile);
compiler(testScriptFile,user_vars);
fs.copySync(testViewTemplate,testViewFile);
compiler(testViewFile,user_vars);
}
console.log(colors.green(' component [ %s:%s ] added.'),componentType,componentName);
}