Merge pull request #62 from ColCh/feature/Feature-aliases

Provide and use aliases to components dir and styles dir
This commit is contained in:
Simon Bailey 2015-02-20 17:51:00 +00:00
commit fbc7776a1c
9 changed files with 54 additions and 15 deletions

View File

@ -28,7 +28,11 @@ module.exports = {
}, },
resolve: { resolve: {
extensions: ['', '.js'] extensions: ['', '.js'],
alias: {
'styles': './src/styles',
'components': './src/scripts/components/'
}
}, },
module: { module: {
preLoaders: [{ preLoaders: [{

View File

@ -34,6 +34,10 @@ module.exports = {
resolve: { resolve: {
extensions: ['', '.js'] extensions: ['', '.js']
alias: {
'styles': './src/styles',
'components': './src/scripts/components/'
}
}, },
module: { module: {

View File

@ -42,6 +42,12 @@ module.exports = function (config) {
test: /\.css$/, test: /\.css$/,
loader: 'style-loader!css-loader' loader: 'style-loader!css-loader'
}] }]
},
resolve: {
alias: {
'styles': './src/styles',
'components': './src/scripts/components/'
}
} }
}, },
webpackServer: { webpackServer: {

View File

@ -4,8 +4,8 @@ var React = require('react/addons');
var ReactTransitionGroup = React.addons.TransitionGroup; var ReactTransitionGroup = React.addons.TransitionGroup;
// CSS // CSS
require('../../styles/normalize.css'); require('styles/normalize.css');
require('../../styles/main.css'); require('styles/main.css');
var imageURL = require('../../images/yeoman.png'); var imageURL = require('../../images/yeoman.png');

View File

@ -2,11 +2,11 @@
var React = require('react/addons'); var React = require('react/addons');
<% if (stylesLanguage === 'css') { %>require('../../styles/<%= classedFileName %>.css');<% } %><% <% if (stylesLanguage === 'css') { %>require('styles/<%= classedFileName %>.css');<% } %><%
if (stylesLanguage === 'sass') { %>require('../../styles/<%= classedFileName %>.sass');<% } %><% if (stylesLanguage === 'sass') { %>require('styles/<%= classedFileName %>.sass');<% } %><%
if (stylesLanguage === 'scss') { %>require('../../styles/<%= classedFileName %>.scss');<% } %><% if (stylesLanguage === 'scss') { %>require('styles/<%= classedFileName %>.scss');<% } %><%
if (stylesLanguage === 'less') { %>require('../../styles/<%= classedFileName %>.less');<% } %><% if (stylesLanguage === 'less') { %>require('styles/<%= classedFileName %>.less');<% } %><%
if (stylesLanguage === 'stylus') { %>require('../../styles/<%= classedFileName %>.styl');<% } %> if (stylesLanguage === 'stylus') { %>require('styles/<%= classedFileName %>.styl');<% } %>
var <%= classedName %> = React.createClass({ var <%= classedName %> = React.createClass({
render: function () { render: function () {

View File

@ -9,7 +9,7 @@ describe('<%= classedName %>', function () {
container.id = 'content'; container.id = 'content';
document.body.appendChild(container); document.body.appendChild(container);
<%= scriptAppName %> = require('../../../src/scripts/components/<%= scriptAppName %>.js'); <%= scriptAppName %> = require('components/<%= scriptAppName %>.js');
component = React.createElement(<%= scriptAppName %>); component = React.createElement(<%= scriptAppName %>);
}); });

View File

@ -5,7 +5,7 @@ describe('<%= classedName %>', function () {
var <%= classedName %>, component; var <%= classedName %>, component;
beforeEach(function () { beforeEach(function () {
<%= classedName %> = require('../../../src/scripts/components/<%= classedFileName %>.js'); <%= classedName %> = require('components/<%= classedFileName %>.js');
component = React.createElement(<%= classedName %>); component = React.createElement(<%= classedName %>);
}); });

View File

@ -4,7 +4,7 @@ describe('main', function () {
var main, component; var main, component;
beforeEach(function () { beforeEach(function () {
main = require('../../../src/scripts/components/main.jsx'); main = require('components/main.jsx');
component = main(); component = main();
}); });

View File

@ -109,6 +109,22 @@ describe('react-webpack generator', function() {
}); });
}); });
it('should generate JS config with aliases', function(done) {
react.run({}, function() {
assert.fileContent([
// style aliases
['webpack.config.js', /resolve[\S\s]+alias[\S\s]+styles/m],
['karma.conf.js', /resolve[\S\s]+alias[\S\s]+styles/m],
['webpack.dist.config.js', /resolve[\S\s]+alias[\S\s]+styles/m],
// script/components aliases
['webpack.config.js', /resolve[\S\s]+alias[\S\s]+components/m],
['karma.conf.js', /resolve[\S\s]+alias[\S\s]+components/m],
['webpack.dist.config.js', /resolve[\S\s]+alias[\S\s]+components/m]
]);
done();
});
});
}); });
describe('Generator', function () { describe('Generator', function () {
@ -156,11 +172,10 @@ describe('react-webpack generator', function() {
}); });
describe('Subgenerators', function() { describe('Subgenerators', function() {
var generatorTest = function(generatorType, specType, targetDirectory, scriptNameFn, specNameFn, suffix, done) { var generatorTest = function(name, generatorType, specType, targetDirectory, scriptNameFn, specNameFn, suffix, done) {
var name = 'Foo';
var deps = [path.join('../..', generatorType)]; var deps = [path.join('../..', generatorType)];
genOptions.appPath += '/scripts' genOptions.appPath = 'src/scripts'
var reactGenerator = helpers.createGenerator('react-webpack:' + generatorType, deps, [name], genOptions); var reactGenerator = helpers.createGenerator('react-webpack:' + generatorType, deps, [name], genOptions);
@ -169,6 +184,9 @@ describe('react-webpack generator', function() {
helpers.assertFileContent([ helpers.assertFileContent([
[path.join('src/scripts', targetDirectory, name + '.js'), new RegExp('var ' + scriptNameFn(name) + suffix, 'g')], [path.join('src/scripts', targetDirectory, name + '.js'), new RegExp('var ' + scriptNameFn(name) + suffix, 'g')],
[path.join('src/scripts', targetDirectory, name + '.js'), new RegExp('require\\(\'styles\\/' + name + suffix + '\\.[^\']+' + '\'\\)', 'g')],
[path.join('test/spec', targetDirectory, 'TempTestApp' + '.js'), new RegExp('require\\(\'components\\/' + 'TempTestApp' + suffix + '\\.[^\']+' + '\'\\)', 'g')],
[path.join('test/spec', targetDirectory, name + '.js'), new RegExp('require\\(\'components\\/' + name + suffix + '\\.[^\']+' + '\'\\)', 'g')],
[path.join('test/spec', targetDirectory, name + '.js'), new RegExp('describe\\(\'' + specNameFn(name) + suffix + '\'', 'g')] [path.join('test/spec', targetDirectory, name + '.js'), new RegExp('describe\\(\'' + specNameFn(name) + suffix + '\'', 'g')]
]); ]);
@ -179,7 +197,14 @@ describe('react-webpack generator', function() {
it('should generate a new component', function(done) { it('should generate a new component', function(done) {
react.run({}, function() { react.run({}, function() {
generatorTest('component', 'component', 'components', _.capitalize, _.capitalize, '', done); generatorTest('Foo', 'component', 'component', 'components', _.capitalize, _.capitalize, '', done);
});
});
it('should generate a subcomponent', function(done) {
react.run({}, function() {
var subComponentNameFn = function () { return 'Bar'; };
generatorTest('Foo/Bar', 'component', 'component', 'components', subComponentNameFn, subComponentNameFn, '', done);
}); });
}); });