diff --git a/generators/app/index.js b/generators/app/index.js index fbb98a7..c6abcf2 100644 --- a/generators/app/index.js +++ b/generators/app/index.js @@ -25,49 +25,6 @@ module.exports = generator.Base.extend({ this.sourceRoot(baseRootPath); this.config.save(); - - this.postcssConfig = function() { - let esprima = require('esprima'); - let walk = require('esprima-walk'); - let escodegen = require('escodegen'); - - let baseConfigPath = path.join(this.destinationRoot(), 'cfg/base.js'); - - let css = '/\\.css$/'; - let cssDialects = ['/\\.sass/', '/\\.scss/', '/\\.less/', '/\\.styl/']; - - let postcss = 'var postcss = { postcss: function() { return []; } }'; - postcss = esprima.parse(postcss); - postcss = postcss.body[0].declarations[0].init.properties[0]; - - let data = fs.readFileSync(baseConfigPath, 'utf8'); - let parsed = esprima.parse(data); - - walk.walkAddParent(parsed, function(node) { - if(node.type === 'AssignmentExpression' && node.left.object.name === 'module') { - node.right.properties.push(postcss); - } - - if(node.type === 'Property' && node.key.name === 'test') { - if(cssDialects.indexOf(node.value.raw) > -1) { - let current = node.parent.properties[1].value.value; - current += '!postcss-loader'; - - node.parent.properties[1].value.value = current; - } - - if(node.value.raw === css) { - let current = 'style-loader!css-loader!postcss-loader'; - - node.parent.properties[1].value.value = current; - } - } - }); - - let options = { format: { indent: { style: ' ' } } }; - let code = escodegen.generate(parsed, options); - fs.writeFileSync(baseConfigPath, code, 'utf8'); - } }, initializing: function() { @@ -178,7 +135,8 @@ module.exports = generator.Base.extend({ install: function() { if(this.postcss) { - this.postcssConfig(); + let postcss = require('./postcss'); + postcss.write(path.join(this.destinationRoot(), 'cfg/base.js')); } if(!this.options['skip-install']) { diff --git a/generators/app/postcss.js b/generators/app/postcss.js new file mode 100644 index 0000000..b56ed73 --- /dev/null +++ b/generators/app/postcss.js @@ -0,0 +1,47 @@ +'use strict'; +let fs = require('fs'); +let esprima = require('esprima'); +let walk = require('esprima-walk'); +let escodegen = require('escodegen'); + +module.exports = { + write: function(path) { + let baseConfigPath = path; + + let css = '/\\.css$/'; + let cssDialects = ['/\\.sass/', '/\\.scss/', '/\\.less/', '/\\.styl/']; + + let postcss = 'var postcss = { postcss: function() { return []; } }'; + postcss = esprima.parse(postcss); + postcss = postcss.body[0].declarations[0].init.properties[0]; + + let data = fs.readFileSync(baseConfigPath, 'utf8'); + let parsed = esprima.parse(data); + + walk.walkAddParent(parsed, function(node) { + if(node.type === 'AssignmentExpression' && node.left.object.name === 'module') { + node.right.properties.push(postcss); + } + + if(node.type === 'Property' && node.key.name === 'test') { + if(cssDialects.indexOf(node.value.raw) > -1) { + let current = node.parent.properties[1].value.value; + current += '!postcss-loader'; + + node.parent.properties[1].value.value = current; + } + + if(node.value.raw === css) { + let current = 'style-loader!css-loader!postcss-loader'; + + node.parent.properties[1].value.value = current; + } + } + }); + + let options = { format: { indent: { style: ' ' } } }; + let code = escodegen.generate(parsed, options); + fs.writeFileSync(baseConfigPath, code, 'utf8'); + + } +}