UNPKG

generator-robonkey

Version:

A Yeoman generator for Gulp, Templating, CSS Preprocessors, Coffeescript, PostCSS, Modernizr, svg icons/icon font generator, BrowserSync, and some libraries to choose from. Express, Wordpress, Drupal, CodeIgniter, Laravel subgenerators are available.

292 lines (199 loc) 10.1 kB
'use strict'; var fs = require('fs'), path = require('path'), jsonfile = require('jsonfile'), createJson = require('../helpers/createJson'), hasFeature = require('../helpers/hasFeature'), fileExists = require('../helpers/fileExists'); var writeConfig = function (configFile, self){ var configJson; if(fileExists(configFile, function(result){ if ( result ){ configJson = jsonfile.readFileSync(configFile); createConfig(self, configJson, function(configJson){ createJson(configFile, configJson); }); } else { configJson = {}; createConfig(self, configJson, function(configJson){ createJson(configFile, configJson); }); } })); function createConfig(self, configJson, cb){ configJson['projectURL'] = self.projectUrl; // browsersync configJson['browsersync'] = {}; if(self.environmentOption === 'static'){ configJson['browsersync']['server'] = path.join(self.rootFolder, self.mainDir); } if(self.environmentOption === 'express'){ configJson['browsersync']['proxy'] = 'http://localhost:3000'; configJson['browsersync']['port'] = 4000; configJson['browsersync']['nodemon'] = {} configJson['browsersync']['nodemon']['script'] = path.join(self.rootFolder, self.mainDir, 'bin/www'); configJson['browsersync']['nodemon']['watch'] = [path.join(self.rootFolder, self.mainDir, 'app.js')]; } // Styles if(self.preproOption){ configJson['styles'] = {} switch(self.preproOption){ case 'scss': configJson['styles']['src'] = path.join(self.rootFolder, 'src/scss/style.scss'); configJson['styles']['src_files'] = path.join(self.rootFolder, 'src/scss/**/*.scss'); break; case 'stylus': configJson['styles']['src'] = path.join(self.rootFolder, 'src/stylus/style.styl'); configJson['styles']['src_files'] = path.join(self.rootFolder, 'src/stylus/**/*.styl'); break; case 'less': configJson['styles']['src'] = path.join(self.rootFolder, 'src/less/style.less'); configJson['styles']['src_files'] = path.join(self.rootFolder, 'src/less/**/*.less'); break; } configJson['styles']['build_srcsmap'] = path.join(self.rootFolder, self.templateDest, self.cssDirPath + '/'); configJson['styles']['build'] = path.join(self.rootFolder, self.templateDest, self.cssDirPath + '/'); configJson['styles']['src_lib'] = path.join(self.rootFolder, self.templateDest, self.cssDirPath, '**/*.css'); configJson['styles']['build_lib'] = path.join(self.rootFolder, self.templateDest, self.cssDirPath + '/'); } // PostCss if(self.postcssScopifyOption) configJson['scope'] = '#scope'; if(self.postcssClassprefixOption) configJson['prefix'] = 'prfx-'; if(self.postcssAutoprefixerOption || self.postcssCssNextOption) configJson['browsers'] = 'last 3 versions, > 1%'; if(self.postcssCssSorterOption) configJson['cssSortOrder'] = 'smacss'; configJson['postcss'] = {}; configJson['postcss']['src'] = path.join(self.rootFolder, self.templateDest, self.cssDirPath, 'style.css'); configJson['postcss']['build'] = path.join(self.rootFolder, self.templateDest, self.cssDirPath + '/'); // Modernizr if(self.modernizrOption){ configJson['modernizr'] = {}; configJson['modernizr']['output'] = 'modernizr-custom.js'; configJson['modernizr']['build'] = path.join(self.rootFolder,self.templateDest, self.jsLibDirPath + '/'); configJson['modernizr']['excludeTests'] = []; configJson['modernizr']['tests'] = []; configJson['modernizr']['options'] = ['setClasses', 'addTest', 'testProp', 'fnBind']; } // Javascript if(self.javascriptOption){ configJson['scripts'] = {} configJson['scripts']['src'] = path.join(self.rootFolder, 'src/js/**/*.js'); configJson['scripts']['build'] = path.join(self.rootFolder, self.templateDest, self.jsDirPath); configJson['scripts']['src_lib'] = path.join( self.rootFolder, self.templateDest, self.jsLibDirPath, '**/*.js'); configJson['scripts']['build_lib'] = path.join(self.rootFolder, self.templateDest, self.jsLibDirPath + '/'); switch(self.javascriptOption){ case 'vanilla': configJson['scripts']['src'] = path.join(self.rootFolder, 'src/js/**/*.js'); break; case 'coffee': configJson['scripts']['src'] = path.join(self.rootFolder, 'coffee/js/**/*.coffee'); break; } } // Images configJson['images'] = {}; configJson['images']['src'] = path.join(self.rootFolder, 'src/img/**/*'); configJson['images']['build'] = path.join(self.rootFolder, self.templateDest, self.imgDirPath + '/'); // HTML if(self.environmentOption === 'static'){ configJson['html'] = {}; configJson['html']['src'] = path.join(self.rootFolder, self.templateDest, '**/*.html'); configJson['html']['build'] = path.join(self.rootFolder, self.templateDest + '/'); } if(self.templateOption === 'jade' && self.environmentOption === 'static'){ configJson['jade'] = {}; configJson['jade']['src'] = path.join(self.rootFolder, 'src/jade/*.jade'); configJson['jade']['watch'] = path.join(self.rootFolder, 'src/jade/**/*.jade'); configJson['jade']['build'] = path.join(self.rootFolder, self.templateDest + '/'); } if(self.templateOption === 'pug' && self.environmentOption === 'static'){ configJson['pug'] = {}; configJson['pug']['src'] = path.join(self.rootFolder, 'src/pug/*.pug'); configJson['pug']['watch'] = path.join(self.rootFolder, 'src/pug/**/*.pug'); configJson['pug']['build'] = path.join(self.rootFolder, self.templateDest + '/'); } if(self.templateOption === 'nunjucks' && self.environmentOption === 'static'){ configJson['nunjucks'] = {}; configJson['nunjucks']['src'] = path.join(self.rootFolder, 'src/nunjucks/pages/**/*.html'); configJson['nunjucks']['watch'] = path.join(self.rootFolder, 'src/nunjucks/**/*.html'); configJson['nunjucks']['templates'] = path.join(self.rootFolder, 'src/nunjucks/'); configJson['nunjucks']['build'] = path.join(self.rootFolder, self.templateDest + '/'); } // Icon font if(self.customIconfontOption){ configJson['iconFont'] = {}; configJson['iconFont']['name'] = self.customIconfontName; configJson['iconFont']['types'] = ['ttf', 'eot', 'woff', 'woff2', 'svg']; configJson['iconFont']['src'] = path.join(self.rootFolder,'src/iconfont/svg/**/*.svg'); configJson['iconFont']['build'] = path.join(self.rootFolder, self.templateDest, self.fontDirPath + '/'); configJson['iconFont']['templateInput'] = ''; configJson['iconFont']['templateOutput'] = ''; configJson['iconFont']['templateFontpath'] = '../fonts/'; switch(self.preproOption){ case 'scss': configJson['iconFont']['templateInput'] = path.join(self.rootFolder, 'src/iconfont/template/_icons.scss'); configJson['iconFont']['templateOutput'] = path.join(self.fontStyleOutputBase, 'src/scss/modules/_icons.scss'); break; case 'stylus': configJson['iconFont']['templateInput'] = path.join(self.rootFolder, 'src/iconfont/template/icons.styl'); configJson['iconFont']['templateOutput'] = path.join(self.fontStyleOutputBase, 'src/stylus/modules/icons.styl'); break; case 'less': configJson['iconFont']['templateInput'] = path.join(self.rootFolder, 'src/iconfont/template/icons.less'); configJson['iconFont']['templateOutput'] = path.join(self.fontStyleOutputBase, 'src/less/modules/icons.less'); break; } } // SVG Icons if(self.svgiconsOption){ configJson['svgicons'] = {}; configJson['svgicons']['spriteName'] = self.svgIconSpriteName; configJson['svgicons']['src'] = path.join(self.rootFolder,'src/icons', self.svgIconSpriteName, '**/*.svg'); configJson['svgicons']['build'] = path.join(self.rootFolder, self.templateDest, self.imgDirPath + '/svg/'); } // Tasks if(!configJson['tasks']){ configJson['tasks'] = {} } if(!configJson['tasks']['main']){ configJson['tasks']['main'] = [] } if(!configJson['tasks']['default']){ configJson['tasks']['default'] = [] } if(!configJson['tasks']['build']){ configJson['tasks']['build'] = [] } configJson['tasks']['main'] = ['images', 'scripts', 'styles']; configJson['tasks']['default'] = ['main', 'watch']; configJson['tasks']['build'] = ['main', 'scripts-build', 'styles-build', 'removeDevFiles']; if(self.environmentOption !== 'static'){ if (!hasFeature('moveBower', configJson['tasks']['main'])){ configJson['tasks']['main'].splice(0, 0, 'moveBower'); } } if(self.environmentOption === 'static'){ if (!hasFeature('html', configJson['tasks']['main'])){ configJson['tasks']['main'].splice(0, 0, 'html'); } if (!hasFeature('html-build', configJson['tasks']['build'])){ configJson['tasks']['build'].splice(1, 0, 'html-build'); } } if(self.environmentOption === 'static' || self.environmentOption === 'express'){ if (!hasFeature('browser-sync', configJson['tasks']['default'])){ configJson['tasks']['default'].splice(2, 0, 'browser-sync'); } } if (self.modernizrOption && !hasFeature('modernizr', configJson['tasks']['build'])){ configJson['tasks']['build'].splice(1, 0, 'modernizr'); } if (self.customIconfontOption && !hasFeature('iconfont', configJson['tasks']['build'])){ configJson['tasks']['build'].push('iconfont'); } if (self.svgiconsOption && !hasFeature('svg', configJson['tasks']['build'])){ configJson['tasks']['build'].push('svg'); } cb(configJson); } } module.exports = writeConfig;