mirror of
https://github.com/wassname/generator-react-webpack.git
synced 2026-08-30 11:23:47 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35ef93138c | ||
|
|
4e698c51b4 | ||
|
|
832907f2fd | ||
|
|
6344984d65 | ||
|
|
6b9e24c85a | ||
|
|
561e072a9c | ||
|
|
56d6b9cd48 | ||
|
|
43f3bce786 | ||
|
|
f6327e1904 | ||
|
|
bd5748bb89 | ||
|
|
782a38b685 | ||
|
|
946775a22f | ||
|
|
165b4ae956 | ||
|
|
cb08986a6d | ||
|
|
52e7528cd2 | ||
|
|
85c0f7f343 | ||
|
|
8ee10ffd52 | ||
|
|
60bf2aae3a | ||
|
|
cb98c7e528 | ||
|
|
498c1032f2 | ||
|
|
20cbcee3fe | ||
|
|
e74b89d8ea | ||
|
|
4e2650f244 | ||
|
|
c99d3c6682 |
+2
-1
@@ -1,6 +1,7 @@
|
||||
language: node_js
|
||||
sudo: false
|
||||
node_js:
|
||||
- '4.1.0'
|
||||
- '4.2.2'
|
||||
before_install:
|
||||
- currentfolder=${PWD##*/}
|
||||
- if [ "$currentfolder" != 'generator-react-webpack' ]; then cd .. && eval "mv $currentfolder generator-react-webpack" && cd generator-react-webpack; fi
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
# generator-react-webpack - Changelog
|
||||
|
||||
## 3.3.0
|
||||
|
||||
1. Added new yeoman key "generatedWithVersion". Will be used for backwards compatibility of new major releases.
|
||||
|
||||
## 3.2.4
|
||||
|
||||
1. Added whitespaces to generated unit tests (made problems when using it with various eslint rules)
|
||||
|
||||
## 3.2.3
|
||||
|
||||
1. Adjusted postcss to work with react-webpack-template 1.4 upwards
|
||||
2. Improved styling output (provided by [thewtex](https://github.com/thewtex))
|
||||
|
||||
## 3.2.2
|
||||
|
||||
1. Cleaned up formatting of unit tests
|
||||
|
||||
## 3.2.1
|
||||
|
||||
1. Updated tests for new version of react-webpack-template
|
||||
|
||||
## 3.2.0
|
||||
|
||||
1. Updated yeoman-generator package to new version 0.22.1 (some methods like generator.NamedBase are now deprecated!)
|
||||
|
||||
## 3.1.1
|
||||
|
||||
1. Added bugfix for https://github.com/newtriks/generator-react-webpack/issues/170
|
||||
|
||||
## 3.1.0
|
||||
|
||||
1. Added support for postcss (Patch provided by [stylesuxx](https://github.com/stylesuxx))
|
||||
|
||||
@@ -26,6 +26,7 @@ If you have built a generator using generator-react-webpack, tell us and we will
|
||||
|
||||
## Generators that extend generator-react-webpack
|
||||
- [Generator-React-Webpack-Alt](https://github.com/weblogixx/generator-react-webpack-alt) (Adds ability to create actions, stores and sources for [alt.js](http://alt.js.org))
|
||||
- [Generator-React-Webpack-Redux](https://github.com/stylesuxx/generator-react-webpack-redux) (Adds ability to create actions and reducers for [Redux](https://github.com/rackt/redux))
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ let utils = require('../../utils/all');
|
||||
let prompts = require('./prompts');
|
||||
let path = require('path');
|
||||
let fs = require('fs');
|
||||
const packageInfo = require('../../package.json');
|
||||
|
||||
// Set the base root directory for our files
|
||||
let baseRootPath = path.dirname(require.resolve('react-webpack-template'));
|
||||
@@ -47,12 +48,14 @@ module.exports = generator.Base.extend({
|
||||
this.appName = props.appName;
|
||||
this.style = props.style;
|
||||
this.postcss = props.postcss
|
||||
this.generatedWithVersion = packageInfo.version.split('.').unshift();
|
||||
|
||||
// Set needed keys into config
|
||||
this.config.set('appName', this.appName);
|
||||
this.config.set('appPath', this.appPath);
|
||||
this.config.set('style', this.style);
|
||||
this.config.set('postcss', this.postcss);
|
||||
this.config.set('generatedWithVersion', this.generatedWithVersion);
|
||||
|
||||
this.config.save();
|
||||
|
||||
@@ -83,7 +86,7 @@ module.exports = generator.Base.extend({
|
||||
if(styleConfig && styleConfig.packages) {
|
||||
|
||||
for(let dependency of styleConfig.packages) {
|
||||
packageSettings.dependencies[dependency.name] = dependency.version;
|
||||
packageSettings.devDependencies[dependency.name] = dependency.version;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +95,7 @@ module.exports = generator.Base.extend({
|
||||
if(this.postcss && postcssConfig && postcssConfig.packages) {
|
||||
|
||||
for(let dependency of postcssConfig.packages) {
|
||||
packageSettings.dependencies[dependency.name] = dependency.version;
|
||||
packageSettings.devDependencies[dependency.name] = dependency.version;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,7 +141,7 @@ module.exports = generator.Base.extend({
|
||||
install: function() {
|
||||
if(this.postcss) {
|
||||
let postcss = require('./postcss');
|
||||
postcss.write(path.join(this.destinationRoot(), 'cfg/base.js'));
|
||||
postcss.write(path.join(this.destinationRoot(), 'cfg/defaults.js'));
|
||||
}
|
||||
|
||||
if(!this.options['skip-install']) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
'use strict';
|
||||
let utils = require('../../utils/all');
|
||||
const utils = require('../../utils/all');
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
@@ -11,7 +11,7 @@ module.exports = [
|
||||
{
|
||||
type: 'list',
|
||||
name: 'style',
|
||||
message: 'Which styles language you want to use?',
|
||||
message: 'Which style language do you want to use?',
|
||||
choices: utils.config.getChoices('style'),
|
||||
default: utils.config.getDefaultChoice('style')
|
||||
},
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
let generator = require('yeoman-generator');
|
||||
let utils = require('../../utils/all');
|
||||
|
||||
module.exports = generator.NamedBase.extend({
|
||||
module.exports = generator.Base.extend({
|
||||
|
||||
constructor: function() {
|
||||
generator.NamedBase.apply(this, arguments);
|
||||
|
||||
generator.Base.apply(this, arguments);
|
||||
this.argument('name', { type: String, required: true });
|
||||
this.option('stateless', {
|
||||
desc: 'Create a stateless component instead of a full one',
|
||||
defaults: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*eslint-env node, mocha */
|
||||
/*global expect */
|
||||
/*eslint no-console: 0*/
|
||||
/* eslint-env node, mocha */
|
||||
/* global expect */
|
||||
/* eslint no-console: 0 */
|
||||
'use strict';
|
||||
|
||||
// Uncomment the following lines to use the react test utilities
|
||||
@@ -10,13 +10,13 @@ import createComponent from 'helpers/shallowRenderHelper';
|
||||
import <%= component.className %> from '<%= component.webpackPath %>';
|
||||
|
||||
describe('<%= component.className %>', () => {
|
||||
let component;
|
||||
let component;
|
||||
|
||||
beforeEach(() => {
|
||||
component = createComponent(<%= component.className %>);
|
||||
});
|
||||
beforeEach(() => {
|
||||
component = createComponent(<%= component.className %>);
|
||||
});
|
||||
|
||||
it('should have its component name as default className', () => {
|
||||
expect(component.props.className).to.equal('<%= style.className %>');
|
||||
});
|
||||
it('should have its component name as default className', () => {
|
||||
expect(component.props.className).to.equal('<%= style.className %>');
|
||||
});
|
||||
});
|
||||
|
||||
+5
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "generator-react-webpack",
|
||||
"version": "3.1.0",
|
||||
"version": "3.3.0",
|
||||
"description": "Yeoman generator for using React with Webpack via Babel",
|
||||
"keywords": [
|
||||
"yeoman-generator",
|
||||
@@ -42,7 +42,7 @@
|
||||
"dependencies": {
|
||||
"react-webpack-template": "^1.0.0",
|
||||
"underscore.string": "^3.2.2",
|
||||
"yeoman-generator": "^0.21.0",
|
||||
"yeoman-generator": "^0.22.0",
|
||||
"yeoman-welcome": "^1.0.1",
|
||||
"esprima": "^2.7.0",
|
||||
"esprima-walk": "^0.1.0",
|
||||
@@ -50,7 +50,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"chai": "^3.2.0",
|
||||
"mocha": "^2.3.2"
|
||||
"mocha": "^2.3.2",
|
||||
"yeoman-assert": "^2.1.1",
|
||||
"yeoman-test": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0",
|
||||
|
||||
@@ -1,37 +1,51 @@
|
||||
'use strict';
|
||||
let path = require('path');
|
||||
let expect = require('chai').expect;
|
||||
let assert = require('yeoman-generator').assert;
|
||||
let helpers = require('yeoman-generator').test
|
||||
let assert = require('yeoman-assert');
|
||||
let helpers = require('yeoman-test');
|
||||
|
||||
// Default globals, used in all tests
|
||||
const defaultPrompts = require('../../../generators/app/prompts.js');
|
||||
let generator;
|
||||
const generatorBase = path.join(__dirname, '../../../generators/app');
|
||||
|
||||
/**
|
||||
* Global before load function. Run in the before callbacks
|
||||
* @param {Object} prompts List of prompts to use
|
||||
* @param {Function} done Done callback
|
||||
*/
|
||||
const beforeLoad = (prompts, done) => {
|
||||
|
||||
helpers.run(generatorBase)
|
||||
.inTmpDir()
|
||||
.withOptions({
|
||||
'skip-welcome-message': true,
|
||||
'skip-install': true
|
||||
})
|
||||
.withPrompts(prompts)
|
||||
.on('ready', (instance) => {
|
||||
generator = instance;
|
||||
})
|
||||
.on('end', done);
|
||||
};
|
||||
|
||||
describe('react-webpack:app', () => {
|
||||
|
||||
let defaultPrompts = require('../../../generators/app/prompts.js');
|
||||
let prompts = {};
|
||||
for(let p of defaultPrompts) {
|
||||
prompts[p.name] = p.default;
|
||||
}
|
||||
|
||||
let generator;
|
||||
let generatorBase = path.join(__dirname, '../../../generators/app');
|
||||
|
||||
before((done) => {
|
||||
|
||||
helpers.run(generatorBase)
|
||||
.inTmpDir()
|
||||
.withOptions({
|
||||
'skip-welcome-message': true,
|
||||
'skip-install': true
|
||||
})
|
||||
.withPrompts(prompts)
|
||||
.on('ready', (instance) => {
|
||||
generator = instance;
|
||||
})
|
||||
.on('end', done);
|
||||
beforeLoad(prompts, done);
|
||||
});
|
||||
|
||||
describe('#config', () => {
|
||||
|
||||
it('should set the generatedWith key to the current generator major version', () => {
|
||||
expect(generator.config.get('generatedWithVersion')).to.equal(3);
|
||||
});
|
||||
|
||||
it('should use "css" as default style language', () => {
|
||||
expect(generator.config.get('style')).to.equal('css');
|
||||
});
|
||||
@@ -65,6 +79,7 @@ describe('react-webpack:app', () => {
|
||||
|
||||
assert.file([
|
||||
'cfg/base.js',
|
||||
'cfg/defaults.js',
|
||||
'cfg/dev.js',
|
||||
'cfg/dist.js',
|
||||
'cfg/test.js',
|
||||
@@ -77,8 +92,8 @@ describe('react-webpack:app', () => {
|
||||
|
||||
assert.file([
|
||||
'src/actions/README.md',
|
||||
'src/index.js',
|
||||
'src/components/Main.js',
|
||||
'src/components/run.js',
|
||||
'src/favicon.ico',
|
||||
'src/images/yeoman.png',
|
||||
'src/index.html',
|
||||
@@ -100,9 +115,8 @@ describe('react-webpack:app', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('react-webpack:app non-default-prompts', () => {
|
||||
describe('react-webpack:app with PostCSS support', () => {
|
||||
|
||||
let defaultPrompts = require('../../../generators/app/prompts.js');
|
||||
let prompts = {};
|
||||
for(let p of defaultPrompts) {
|
||||
prompts[p.name] = p.default;
|
||||
@@ -110,29 +124,23 @@ describe('react-webpack:app non-default-prompts', () => {
|
||||
|
||||
prompts.postcss = true;
|
||||
|
||||
let generator;
|
||||
let generatorBase = path.join(__dirname, '../../../generators/app');
|
||||
|
||||
before((done) => {
|
||||
|
||||
helpers.run(generatorBase)
|
||||
.inTmpDir()
|
||||
.withOptions({
|
||||
'skip-welcome-message': true,
|
||||
'skip-install': true
|
||||
})
|
||||
.withPrompts(prompts)
|
||||
.on('ready', (instance) => {
|
||||
generator = instance;
|
||||
})
|
||||
.on('end', done);
|
||||
beforeLoad(prompts, done);
|
||||
});
|
||||
|
||||
describe('#config', () => {
|
||||
|
||||
it('should set the generatedWith key to the current generator major version', () => {
|
||||
expect(generator.config.get('generatedWithVersion')).to.equal(3);
|
||||
});
|
||||
|
||||
it('should use "css" as default style language', () => {
|
||||
expect(generator.config.get('style')).to.equal('css');
|
||||
});
|
||||
|
||||
it('should enable "PostCSS"', () => {
|
||||
expect(generator.config.get('postcss')).to.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#createFiles', () => {
|
||||
@@ -159,6 +167,7 @@ describe('react-webpack:app non-default-prompts', () => {
|
||||
|
||||
assert.file([
|
||||
'cfg/base.js',
|
||||
'cfg/defaults.js',
|
||||
'cfg/dev.js',
|
||||
'cfg/dist.js',
|
||||
'cfg/test.js',
|
||||
@@ -169,25 +178,24 @@ describe('react-webpack:app non-default-prompts', () => {
|
||||
|
||||
it('should insert the postcss loader into the style pipes', () => {
|
||||
|
||||
assert.fileContent('cfg/base.js', 'loader: \'style!css!postcss-loader\'');
|
||||
//assert.fileContent('cfg/base.js', 'loader: \'style-loader!css-loader!postcss-loader\'');
|
||||
assert.fileContent('cfg/base.js', 'loader: \'style-loader!css-loader!postcss-loader!sass-loader?outputStyle=expanded&indentedSyntax\'');
|
||||
assert.fileContent('cfg/base.js', 'loader: \'style-loader!css-loader!postcss-loader!sass-loader?outputStyle=expanded\'');
|
||||
assert.fileContent('cfg/base.js', 'loader: \'style-loader!css-loader!postcss-loader!less-loader\'');
|
||||
assert.fileContent('cfg/base.js', 'loader: \'style-loader!css-loader!postcss-loader!stylus-loader\'');
|
||||
assert.fileContent('cfg/defaults.js', 'loader: \'style-loader!css-loader!postcss-loader\'');
|
||||
assert.fileContent('cfg/defaults.js', 'loader: \'style-loader!css-loader!postcss-loader!sass-loader?outputStyle=expanded&indentedSyntax\'');
|
||||
assert.fileContent('cfg/defaults.js', 'loader: \'style-loader!css-loader!postcss-loader!sass-loader?outputStyle=expanded\'');
|
||||
assert.fileContent('cfg/defaults.js', 'loader: \'style-loader!css-loader!postcss-loader!less-loader\'');
|
||||
assert.fileContent('cfg/defaults.js', 'loader: \'style-loader!css-loader!postcss-loader!stylus-loader\'');
|
||||
});
|
||||
|
||||
it('should append the postcss function to the base config', () => {
|
||||
|
||||
assert.fileContent('cfg/base.js', ',\n postcss: function () {\n return [];\n }');
|
||||
assert.fileContent('cfg/defaults.js', ',\n postcss: function () {\n return [];\n }');
|
||||
});
|
||||
|
||||
it('should generate required source files', () => {
|
||||
|
||||
assert.file([
|
||||
'src/actions/README.md',
|
||||
'src/index.js',
|
||||
'src/components/Main.js',
|
||||
'src/components/run.js',
|
||||
'src/favicon.ico',
|
||||
'src/images/yeoman.png',
|
||||
'src/index.html',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
let path = require('path');
|
||||
let assert = require('yeoman-generator').assert;
|
||||
let helpers = require('yeoman-generator').test
|
||||
let assert = require('yeoman-assert');
|
||||
let helpers = require('yeoman-test');
|
||||
|
||||
describe('react-webpack:component', () => {
|
||||
|
||||
|
||||
+4
-4
@@ -1,9 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
let config = require('./config');
|
||||
let yeoman = require('./yeoman');
|
||||
const config = require('./config');
|
||||
const yeoman = require('./yeoman');
|
||||
|
||||
module.exports = {
|
||||
config: config,
|
||||
yeoman: yeoman
|
||||
config,
|
||||
yeoman
|
||||
};
|
||||
|
||||
+4
-7
@@ -57,12 +57,9 @@ let getDefaultChoice = (setting) => {
|
||||
return config && config.default !== undefined && config.default.length > 0 ? config.default : null;
|
||||
}
|
||||
|
||||
// getChoices
|
||||
// getDefault
|
||||
|
||||
module.exports = {
|
||||
getSetting: getSetting,
|
||||
getChoices: getChoices,
|
||||
getChoiceByKey: getChoiceByKey,
|
||||
getDefaultChoice: getDefaultChoice
|
||||
getSetting,
|
||||
getChoices,
|
||||
getChoiceByKey,
|
||||
getDefaultChoice
|
||||
};
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
"value": "sass",
|
||||
"suffix": ".sass",
|
||||
"packages": [
|
||||
{ "name": "sass-loader", "version": "^1.0.1" },
|
||||
{ "name": "node-sass", "version": "^3.3.3" }
|
||||
{ "name": "sass-loader", "version": "^3.1.2" },
|
||||
{ "name": "node-sass", "version": "^3.4.2" }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -72,8 +72,8 @@
|
||||
"value": "scss",
|
||||
"suffix": ".scss",
|
||||
"packages": [
|
||||
{ "name": "sass-loader", "version": "^1.0.1" },
|
||||
{ "name": "node-sass", "version": "^3.3.3" }
|
||||
{ "name": "sass-loader", "version": "^3.1.2" },
|
||||
{ "name": "node-sass", "version": "^3.4.2" }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -90,7 +90,9 @@
|
||||
"value": "stylus",
|
||||
"suffix": ".styl",
|
||||
"packages": [
|
||||
{ "name": "stylus-loader", "version": "^0.5.0" }
|
||||
{ "name": "stylus-loader", "version": "^0.5.0" },
|
||||
{ "name": "stylus", "version": "~0.49.2" },
|
||||
{ "name": "nib", "version": "~1.0.4" }
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
+10
-10
@@ -1,8 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
let path = require('path');
|
||||
let configUtils = require('./config');
|
||||
let _ = require('underscore.string');
|
||||
const path = require('path');
|
||||
const configUtils = require('./config');
|
||||
const _ = require('underscore.string');
|
||||
|
||||
// Needed directory paths
|
||||
const baseName = path.basename(process.cwd());
|
||||
@@ -157,11 +157,11 @@ let getDestinationClassName = (name, type, suffix) => {
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getBaseDir: getBaseDir,
|
||||
getAllSettingsFromComponentName: getAllSettingsFromComponentName,
|
||||
getAppName: getAppName,
|
||||
getCleanedPathName: getCleanedPathName,
|
||||
getComponentStyleName: getComponentStyleName,
|
||||
getDestinationPath: getDestinationPath,
|
||||
getDestinationClassName: getDestinationClassName
|
||||
getBaseDir,
|
||||
getAllSettingsFromComponentName,
|
||||
getAppName,
|
||||
getCleanedPathName,
|
||||
getComponentStyleName,
|
||||
getDestinationPath,
|
||||
getDestinationClassName
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user