From f7bb3c2b8022169a2d70b448ea5b5fc151275e55 Mon Sep 17 00:00:00 2001 From: Yonatan Schreiber Date: Sat, 4 Apr 2015 14:42:52 +0300 Subject: [PATCH 1/7] add 'architecture' question, Reflux option, and related store and actionCreator --- .gitignore | 3 +- action/index.js | 23 ++++++++++----- app/index.js | 19 +++++++----- component/index.js | 2 +- main/index.js | 2 +- script-base.js | 17 +++++++++-- store/index.js | 29 +++++++++++++------ templates/common/_package.json | 5 ++-- templates/common/_webpack.config.js | 9 +++--- templates/common/_webpack.dist.config.js | 9 +++--- templates/common/karma.conf.js | 6 ++-- .../javascript/{Action.js => FluxAction.js} | 0 .../javascript/{Store.js => FluxStore.js} | 0 templates/javascript/RefluxAction.js | 11 +++++++ templates/javascript/RefluxStore.js | 14 +++++++++ 15 files changed, 107 insertions(+), 42 deletions(-) rename templates/javascript/{Action.js => FluxAction.js} (100%) rename templates/javascript/{Store.js => FluxStore.js} (100%) create mode 100644 templates/javascript/RefluxAction.js create mode 100644 templates/javascript/RefluxStore.js diff --git a/.gitignore b/.gitignore index eced953..36d6c89 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ Desktop.ini $RECYCLE.BIN/ node_modules/ /test/* -npm-debug.log \ No newline at end of file +npm-debug.log +.idea/ \ No newline at end of file diff --git a/action/index.js b/action/index.js index 8fadfdc..a07884f 100644 --- a/action/index.js +++ b/action/index.js @@ -5,22 +5,29 @@ var ScriptBase = require('../script-base.js'); var ActionGenerator = module.exports = function ActionGenerator(args, options, config) { args[0] += 'ActionCreators'; ScriptBase.apply(this, arguments); -} +}; util.inherits(ActionGenerator, ScriptBase); ActionGenerator.prototype.createActionFile = function createActionFile() { this.option('es6'); - this.es6 = this.options.es6; - console.log(this.name); + var actionTemplate; + switch (this.architecture){ + case 'flux': + actionTemplate = 'FluxAction'; + break; + case 'reflux': + actionTemplate = 'RefluxAction'; + break; + } + + console.log('Creating ' + this.architecture + ' action'); this.generateSourceAndTest( - 'Action', + actionTemplate, 'spec/Action', - void(0), - 'actions', - false + 'actions' ); -} +}; diff --git a/app/index.js b/app/index.js index 0e3969a..818167f 100644 --- a/app/index.js +++ b/app/index.js @@ -66,16 +66,21 @@ ReactWebpackGenerator.prototype.askForReactRouter = function () { }.bind(this)); }; -ReactWebpackGenerator.prototype.askForFlux = function() { +ReactWebpackGenerator.prototype.askForArchitecture = function() { var done = this.async(); this.prompt({ - type : 'confirm', - name : 'flux', - message : 'Would you like to include flux?', + type : 'list', + name : 'architecture', + message : 'Would you like to use one of those architectures?', + choices: [ + {name:'No need for that, thanks',value:false}, + {name:'Flux',value:'flux'}, + {name:'ReFlux',value:'reflux'} + ], default : false }, function(props) { - this.env.options.flux = props.flux; - this.config.set('flux', props.flux); + this.env.options.architecture = props.architecture; + this.config.set('architecture', props.architecture); done(); }.bind(this)); }; @@ -113,7 +118,7 @@ ReactWebpackGenerator.prototype.createIndexHtml = function createIndexHtml() { ReactWebpackGenerator.prototype.packageFiles = function () { this.es6 = this.options.es6; this.reactRouter = this.env.options.reactRouter; - this.flux = this.env.options.flux; + this.architecture = this.env.options.architecture; this.stylesLanguage = this.env.options.stylesLanguage; this.template('../../templates/common/_package.json', 'package.json'); this.template('../../templates/common/_webpack.config.js', 'webpack.config.js'); diff --git a/component/index.js b/component/index.js index 59cdc95..26ca2e9 100644 --- a/component/index.js +++ b/component/index.js @@ -13,7 +13,7 @@ ComponentGenerator.prototype.createComponentFile = function createComponentFile( this.es6 = this.options.es6; - this.generateSourceAndTest( + this.generateComponentTestAndStyle( 'Component', 'spec/Component', 'styles/Component', diff --git a/main/index.js b/main/index.js index 4fe14de..6ccbb28 100644 --- a/main/index.js +++ b/main/index.js @@ -22,7 +22,7 @@ MainGenerator.prototype.createMainFile = function createMainFile() { }; MainGenerator.prototype.createDispatcher = function createDispatcher() { - if(this.env.options.flux) { + if(this.env.options.architecture=='flux') { this.appTemplate('Dispatcher', 'dispatcher/' + this.scriptAppName + 'Dispatcher'); } }; diff --git a/script-base.js b/script-base.js index 383f03a..6b6acf5 100644 --- a/script-base.js +++ b/script-base.js @@ -20,6 +20,7 @@ var Generator = module.exports = function Generator() { this.classedFileName = this._.capitalizeFile(this.name); this.classedName = this._.capitalizeClass(this.name); this.stylesLanguage = this.config.get('styles-language'); + this.architecture = this.config.get('architecture'); if (typeof this.options.appPath === 'undefined') { this.options.appPath = this.options.appPath || 'src/scripts'; @@ -60,6 +61,13 @@ var Generator = module.exports = function Generator() { util.inherits(Generator, yeoman.generators.NamedBase); Generator.prototype.appTemplate = function (src, dest) { + yeoman.generators.Base.prototype.template.apply(this, [ + path.join('javascript', src + this.scriptSuffix), + path.join(this.options.appPath, dest) + this.scriptSuffix + ]); +}; + +Generator.prototype.reactComponentTemplate = function (src, dest) { yeoman.generators.Base.prototype.template.apply(this, [ path.join('javascript', src + this.reactSuffix), path.join(this.options.appPath, dest) + this.reactSuffix @@ -88,8 +96,13 @@ Generator.prototype.htmlTemplate = function (src, dest) { ]); }; -Generator.prototype.generateSourceAndTest = function (appTemplate, testTemplate, stylesTemplate, targetDirectory, includeStyles) { +Generator.prototype.generateSourceAndTest = function (appTemplate, testTemplate, targetDirectory) { this.appTemplate(appTemplate, path.join(targetDirectory, this._.capitalizeFile(this.name))); this.testTemplate(testTemplate, path.join(targetDirectory, this._.capitalizeFile(this.name))); - if(includeStyles) this.stylesTemplate(stylesTemplate, path.join(this._.capitalizeFile(this.name))); +}; + +Generator.prototype.generateComponentTestAndStyle = function (componentTemplate, testTemplate, stylesTemplate, targetDirectory) { + this.reactComponentTemplate(componentTemplate, path.join(targetDirectory, this._.capitalizeFile(this.name))); + this.testTemplate(testTemplate, path.join(targetDirectory, this._.capitalizeFile(this.name))); + this.stylesTemplate(stylesTemplate, path.join(this._.capitalizeFile(this.name))); }; diff --git a/store/index.js b/store/index.js index 324b32b..b277abf 100644 --- a/store/index.js +++ b/store/index.js @@ -2,24 +2,35 @@ var util = require('util'); var ScriptBase = require('../script-base.js'); -var ActionGenerator = module.exports = function ActionGenerator(args, options, config) { +var StoreGenerator = module.exports = function StoreGenerator(args, options, config) { args[0] += 'Store'; ScriptBase.apply(this, arguments); } -util.inherits(ActionGenerator, ScriptBase); +util.inherits(StoreGenerator, ScriptBase); -ActionGenerator.prototype.createActionFile = function createActionFile() { +StoreGenerator .prototype.createStoreFile = function createStoreFile() { this.option('es6'); this.es6 = this.options.es6; - this.dispatcherName = this._.capitalizeFile(this.config.get('app-name')) + 'AppDispatcher'; + + var storeTemplate; + switch (this.architecture){ + case 'flux': + storeTemplate = 'FluxStore'; + this.dispatcherName = this._.capitalizeFile(this.config.get('app-name')) + 'AppDispatcher'; + break; + case 'reflux': + storeTemplate = 'RefluxStore'; + break; + } + + console.log('Creating ' + this.architecture + ' store'); + this.generateSourceAndTest( - 'Store', + storeTemplate, 'spec/Store', - void(0), - 'stores', - false + 'stores' ); -} +}; diff --git a/templates/common/_package.json b/templates/common/_package.json index 2d0e74b..2730fc7 100644 --- a/templates/common/_package.json +++ b/templates/common/_package.json @@ -10,10 +10,11 @@ "mainInput": "<% if (reactRouter) { %>main<% } else { %><%= scriptAppName %><% } %>", "mainOutput": "main", "dependencies": {<% if (reactRouter) { %> - "react-router": "^0.11.6",<% } if (flux) { %> + "react-router": "^0.11.6",<% } if (architecture === 'flux') { %> "flux": "^2.0.1", "events": "^1.0.2", - "object-assign": "^2.0.0", <% } %> + "object-assign": "^2.0.0", <% } if (architecture === 'reflux') {%> + "reflux": "^0.2.7", <% } %> "react": "~0.12.2", "normalize.css": "~3.0.3" }, diff --git a/templates/common/_webpack.config.js b/templates/common/_webpack.config.js index 6c7e765..9515856 100644 --- a/templates/common/_webpack.config.js +++ b/templates/common/_webpack.config.js @@ -30,10 +30,11 @@ module.exports = { resolve: { extensions: ['', '.js'], alias: { - 'styles': '../../../src/styles', - 'components': '../../../src/scripts/components/'<% if(flux) { %>, - 'stores': '../../../src/scripts/stores/', - 'actions': '../../../src/scripts/actions/'<% } %> + 'styles': __dirname + '/src/styles', + 'mixins': __dirname + '/src/scripts/mixins', + 'components': __dirname + '/src/scripts/components/'<% if(architecture==='flux'||architecture=='reflux') { %>, + 'stores': __dirname + '/src/scripts/stores/', + 'actions': __dirname + '/src/scripts/actions/'<% } %> } }, module: { diff --git a/templates/common/_webpack.dist.config.js b/templates/common/_webpack.dist.config.js index 4bc115d..78c3750 100644 --- a/templates/common/_webpack.dist.config.js +++ b/templates/common/_webpack.dist.config.js @@ -35,10 +35,11 @@ module.exports = { resolve: { extensions: ['', '.js'], alias: { - 'styles': '../../../src/styles', - 'components': '../../../src/scripts/components/'<% if(flux) { %>, - 'stores': '../../../src/scripts/stores/', - 'actions': '../../../src/scripts/actions/'<% } %> + 'styles': __dirname + '/src/styles', + 'mixins': __dirname + '/src/scripts/mixins', + 'components': __dirname + '/src/scripts/components/'<% if(architecture==='flux'||architecture=='reflux') { %>, + 'stores': __dirname + '/src/scripts/stores/', + 'actions': __dirname + '/src/scripts/actions/'<% } %> } }, diff --git a/templates/common/karma.conf.js b/templates/common/karma.conf.js index fdc88e5..2e7936a 100644 --- a/templates/common/karma.conf.js +++ b/templates/common/karma.conf.js @@ -8,12 +8,12 @@ module.exports = function (config) { frameworks: ['jasmine'], files: [ 'test/helpers/**/*.js', - 'test/spec/components/**/*.js'<% if(flux) { %>, + 'test/spec/components/**/*.js'<% if(architecture === 'flux'||architecture === 'reflux') { %>, 'test/spec/stores/**/*.js', 'test/spec/actions/**/*.js'<% } %> ], preprocessors: { - 'test/spec/components/**/*.js': ['webpack']<% if(flux) { %>, + 'test/spec/components/**/*.js': ['webpack']<% if(architecture === 'flux'||architecture === 'reflux') { %>, 'test/spec/stores/**/*.js': ['webpack'], 'test/spec/actions/**/*.js': ['webpack']<% } %> }, @@ -52,7 +52,7 @@ module.exports = function (config) { resolve: { alias: { 'styles': path.join(process.cwd(), './src/styles/'), - 'components': path.join(process.cwd(), './src/scripts/components/')<% if(flux) { %>, + 'components': path.join(process.cwd(), './src/scripts/components/')<% if(architecture === 'flux'||architecture === 'reflux') { %>, 'stores': '../../../src/scripts/stores/', 'actions': '../../../src/scripts/actions/'<% } %> } diff --git a/templates/javascript/Action.js b/templates/javascript/FluxAction.js similarity index 100% rename from templates/javascript/Action.js rename to templates/javascript/FluxAction.js diff --git a/templates/javascript/Store.js b/templates/javascript/FluxStore.js similarity index 100% rename from templates/javascript/Store.js rename to templates/javascript/FluxStore.js diff --git a/templates/javascript/RefluxAction.js b/templates/javascript/RefluxAction.js new file mode 100644 index 0000000..c48807f --- /dev/null +++ b/templates/javascript/RefluxAction.js @@ -0,0 +1,11 @@ +'use strict'; + +var Reflux = require('reflux'); + +var <%= classedName %> = Reflux.createActions([ + +]); + + +<% if (es6) { %> export default <%= classedName %>; <% } +else { %>module.exports = <%= classedName %>; <% } %> diff --git a/templates/javascript/RefluxStore.js b/templates/javascript/RefluxStore.js new file mode 100644 index 0000000..5da8d6c --- /dev/null +++ b/templates/javascript/RefluxStore.js @@ -0,0 +1,14 @@ +'use strict'; + +var Reflux = require('reflux'); +//var Actions = require('actions/..'); + + +var <%= classedName %> = Reflux.createStore({ + listenables: Actions, + + +}); + +<% if (es6) { %> export default <%= classedName %>; <% } + else { %>module.exports = <%= classedName %>; <% } %> From 27d8346e2a7447e124c8689158b943db6a84dcc7 Mon Sep 17 00:00:00 2001 From: Yonatan Schreiber Date: Sat, 4 Apr 2015 15:29:03 +0300 Subject: [PATCH 2/7] fix appname bug --- app/index.js | 3 ++- main/index.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/index.js b/app/index.js index 818167f..c434b3f 100644 --- a/app/index.js +++ b/app/index.js @@ -15,7 +15,6 @@ var ReactWebpackGenerator = module.exports = function ReactWebpackGenerator(args this.config.set('app-name', this.appname); - args = ['main']; if (typeof this.options.appPath === 'undefined') { this.options.appPath = this.options.appPath || 'src'; @@ -23,6 +22,8 @@ var ReactWebpackGenerator = module.exports = function ReactWebpackGenerator(args this.appPath = this.options.appPath; + args = [this.scriptAppName]; + this.composeWith('react-webpack:common', { args: args }); diff --git a/main/index.js b/main/index.js index 6ccbb28..0dfb66f 100644 --- a/main/index.js +++ b/main/index.js @@ -9,10 +9,10 @@ var MainGenerator = module.exports = function MainGenerator(args, options, confi util.inherits(MainGenerator, ScriptBase); -MainGenerator.prototype.createAppFile = function createAppFile() { +MainGenerator.prototype.createAppFile = function createAppFile(scriptAppName) { this.reactRouter = this.env.options.reactRouter; - this.appTemplate('App', 'components/' + this.scriptAppName); - this.testTemplate('spec/App', 'components/' + this.scriptAppName); + this.appTemplate('App', 'components/' + scriptAppName); + this.testTemplate('spec/App', 'components/' + scriptAppName); }; MainGenerator.prototype.createMainFile = function createMainFile() { From 9c9ecaa016672ef9f1f7c4f5d0bf9848ecfbdf15 Mon Sep 17 00:00:00 2001 From: Yonatan Schreiber Date: Sat, 4 Apr 2015 16:07:08 +0300 Subject: [PATCH 3/7] fix appname --- app/index.js | 3 ++- main/index.js | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/index.js b/app/index.js index 818167f..c434b3f 100644 --- a/app/index.js +++ b/app/index.js @@ -15,7 +15,6 @@ var ReactWebpackGenerator = module.exports = function ReactWebpackGenerator(args this.config.set('app-name', this.appname); - args = ['main']; if (typeof this.options.appPath === 'undefined') { this.options.appPath = this.options.appPath || 'src'; @@ -23,6 +22,8 @@ var ReactWebpackGenerator = module.exports = function ReactWebpackGenerator(args this.appPath = this.options.appPath; + args = [this.scriptAppName]; + this.composeWith('react-webpack:common', { args: args }); diff --git a/main/index.js b/main/index.js index 6ccbb28..d28ad0d 100644 --- a/main/index.js +++ b/main/index.js @@ -9,10 +9,11 @@ var MainGenerator = module.exports = function MainGenerator(args, options, confi util.inherits(MainGenerator, ScriptBase); -MainGenerator.prototype.createAppFile = function createAppFile() { +MainGenerator.prototype.createAppFile = function createAppFile(scriptAppName) { this.reactRouter = this.env.options.reactRouter; - this.appTemplate('App', 'components/' + this.scriptAppName); - this.testTemplate('spec/App', 'components/' + this.scriptAppName); + this.scriptAppName = scriptAppName; + this.appTemplate('App', 'components/' + scriptAppName); + this.testTemplate('spec/App', 'components/' + scriptAppName); }; MainGenerator.prototype.createMainFile = function createMainFile() { From 2869169b7b76e536089a386b9def1727412de308 Mon Sep 17 00:00:00 2001 From: yonatanmn Date: Sat, 4 Apr 2015 16:11:26 +0300 Subject: [PATCH 4/7] Update index.js --- main/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/main/index.js b/main/index.js index 0dfb66f..d28ad0d 100644 --- a/main/index.js +++ b/main/index.js @@ -11,6 +11,7 @@ util.inherits(MainGenerator, ScriptBase); MainGenerator.prototype.createAppFile = function createAppFile(scriptAppName) { this.reactRouter = this.env.options.reactRouter; + this.scriptAppName = scriptAppName; this.appTemplate('App', 'components/' + scriptAppName); this.testTemplate('spec/App', 'components/' + scriptAppName); }; From 895b95411eae3ce13222e351f8a320e5bf1bc12f Mon Sep 17 00:00:00 2001 From: Yonatan Schreiber Date: Wed, 8 Apr 2015 23:23:46 +0300 Subject: [PATCH 5/7] fix tests to work with architecture = 'flux' (no reflux support yet) --- test/test-creation.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test-creation.js b/test/test-creation.js index cf0a5cb..3e94a10 100644 --- a/test/test-creation.js +++ b/test/test-creation.js @@ -190,7 +190,7 @@ describe('react-webpack generator', function() { beforeEach(function(done) { helpers.mockPrompt(react, { - flux: true + architecture: 'flux' }); react.run({}, function() { @@ -277,7 +277,7 @@ describe('react-webpack generator', function() { beforeEach(function(done){ helpers.mockPrompt(react, { - flux: true + architecture: 'flux' }); react.run({}, function() { @@ -312,7 +312,7 @@ describe('react-webpack generator', function() { beforeEach(function(done) { helpers.mockPrompt(react, { - flux: true + architecture: 'flux' }); react.run({}, function() { From 9373ce6c2a9f9b2659c167347a8160e8831b5bff Mon Sep 17 00:00:00 2001 From: Yonatan Schreiber Date: Thu, 9 Apr 2015 01:02:19 +0300 Subject: [PATCH 6/7] update readme --- README.md | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 161 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 97248e6..1710dc2 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,11 @@ Available generators: * [react-webpack](#app) (aka [react-webpack:app](#app)) * [react-webpack:component](#component) +and for **Flux** or **Reflux : +* [react-webpack:action](#action) +* [react-webpack:store](#store) + + ### App Sets up a new ReactJS app, generating all the boilerplate you need to get started. The app generator also facilitates the following: @@ -45,7 +50,7 @@ yo react-webpack ### Component -Generates a [JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) component in `src/scripts/components` and it's corresponding test in `src/spec/components`. +Generates a [JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) component in `src/scripts/components`, its corresponding test in `src/spec/components` and its style in `src/style`. Example: ```bash @@ -58,6 +63,8 @@ Produces `src/scripts/components/Foo.js` (*javascript - JSX*): var React = require('react/addons'); +require('styles/componentName.css'); //or .sass,.less etc... + var Foo = React.createClass({ render: function () { return ( @@ -89,13 +96,131 @@ describe('Foo', function () { }); ``` -And `src/styles/Foo.css`: +And `src/styles/Foo.css` (or .sass, .less etc...) : ``` .Foo{ border: 1px dashed #f00; } ``` +### Action + +When using Flux or Reflux architecture, it generates an actionCreator in `src/scripts/actions` and it's corresponding test in `src/spec/actions`. + +Example: +```bash +yo react-webpack:action bar +``` +Will create a file - `src/scripts/actions/BarActionCreators.js` + +if 'architecture' is **Flux**, it Produces : +``` +'use strict'; + +var BarActionCreators = { + +} + +module.exports = BarActionCreators; +``` +And if it's **Reflux**: +``` +'use strict'; + +var Reflux = require('reflux'); + +var BarActionCreators = Reflux.createActions([ + +]); + + +module.exports = BarActionCreators; +``` + +and same test for both architectures: +``` +'use strict'; + +describe('BarActionCreators', function() { + var action; + + beforeEach(function() { + action = require('actions/BarActionCreators.js'); + }); + + it('should be defined', function() { + expect(action).toBeDefined(); + }); +}); +``` + +### Store + +When using Flux or Reflux architecture, it generates a store in `src/scripts/stores` and it's corresponding test in `src/spec/stores`. + +Example: +```bash +yo react-webpack:store baz +``` +Will create a file - `src/scripts/stores/BazStore.js` + +if 'architecture' is **Flux**, it Produces : +``` +'use strict'; + +var EventEmitter = require('events').EventEmitter; +var assign = require('object-assign'); +var MainAppDispatcher = require('../dispatcher/MainAppDispatcher'); + +var BazStore = assign({}, EventEmitter.prototype, { + +}); + +BazStore.dispatchToken = MainAppDispatcher.register(function(action) { + + switch(action.type) { + default: + } + +}); + +module.exports = BazStore; +``` +And if it's **Reflux**: +``` +'use strict'; + +var Reflux = require('reflux'); +//var Actions = require('actions/..'); + + +var BazStore = Reflux.createStore({ + listenables: Actions, + + +}); + +module.exports = BazStore; +``` + +and same test for both architectures: +``` +'use strict'; + +describe('BazStore', function() { + var store; + + beforeEach(function() { + store = require('stores/BazStore.js'); + }); + + it('should be defined', function() { + expect(store).toBeDefined(); + }); +}); +``` + + ## Options Options are available as additional installs to the initial application generation phase. @@ -103,6 +228,14 @@ Options are available as additional installs to the initial application generati A complete routing library for React. This option only adds the basic hooks to get started with [react router](https://github.com/rackt/react-router). +### styles language + +css, sass, scss, less or stylus + +### architecture + +[flux](https://facebook.github.io/flux/) or [reflux](https://github.com/spoike/refluxjs) + ## Testing Running `grunt test` will run the unit tests with karma. Tests are written using [Jasmine](http://jasmine.github.io/) by default. @@ -118,23 +251,44 @@ project - src - scripts -components - ComponentOne.js - ComponentTwo.js - main.js + MainApp.js + Foo.js + AnotherComponent.js + + //for flux/reflux + -actions + BarActionCreators.js + -stores + BazStore.js + //for flux + -dispatcher + FooAppDispatcher + - styles main.css index.html - test - spec - components - ComponentOne.js - ComponentTwo.js + MainApp.js + Foo.js + AnotherComponent.js + + //for flux/reflux + -actions + BarActionCreators.js + -stores + BazStore.js + - helpers - react addons.js phantomjs-shims.js Gruntfile.js karma.conf.js + package.json + webpack.config.js + webpack.dist.config.js ``` I have tried to keep the project structure as simple as possible and understand it may not suit everyone. From 9914120118fad3548de66d9904ee01e647c7c087 Mon Sep 17 00:00:00 2001 From: Yonatan Schreiber Date: Thu, 9 Apr 2015 01:17:55 +0300 Subject: [PATCH 7/7] no message --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1710dc2..125971b 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Available generators: * [react-webpack](#app) (aka [react-webpack:app](#app)) * [react-webpack:component](#component) -and for **Flux** or **Reflux : +and for **Flux** or **Reflux** : * [react-webpack:action](#action) * [react-webpack:store](#store) @@ -232,6 +232,8 @@ A complete routing library for React. This option only adds the basic hooks to g css, sass, scss, less or stylus +Sets the style file's template and extension + ### architecture [flux](https://facebook.github.io/flux/) or [reflux](https://github.com/spoike/refluxjs)