Compare commits

...

30 Commits

Author SHA1 Message Date
Chris da0e6a06e8 1.5.3 2016-03-31 10:22:53 +02:00
Chris c0e5461e03 Added missing loaders to default config (now supports svg and mp4/ogg file types) 2016-03-31 10:22:43 +02:00
Chris 45b31f0227 Fixed singleton loading problems from webpack config. 2016-03-29 14:11:12 +02:00
Chris ce025c4116 Changed paths to relative instead of absolute in webpack config 2016-03-29 13:59:01 +02:00
Chris f93fa39ebb 1.5.2 2016-03-29 08:35:57 +02:00
Chris 27fa8153f8 1.5.2: Adjusted package versions 2016-03-29 08:35:45 +02:00
Chris a75c391626 1.5.1 2016-03-09 19:16:56 +01:00
Chris 8faa282e31 Changed eslint config to 2.2.x. Fixes https://github.com/newtriks/generator-react-webpack/issues/196 2016-03-09 19:16:46 +01:00
Chris 19f9ea6fbb Added mocha to global eslint config. Fixes https://github.com/newtriks/generator-react-webpack/issues/195 2016-03-09 19:16:07 +01:00
Chris e89ec8315a 1.5.0 2016-02-23 21:21:34 +01:00
Chris 90e9e12fc6 Adjusted readme for new release 2016-02-23 21:21:24 +01:00
Chris 21db896237 Updated eslint react plugin 2016-02-23 21:16:21 +01:00
Chris 2c0b7cfda9 Upgraded linter to v2.0 (including needed plugins) 2016-02-18 11:20:25 +01:00
Chris 798e28c227 Updated glob dependency to new version 2016-02-12 09:04:43 +01:00
Chris d75c3b436b Merge pull request #25 from Igonato/master
PhantomJS Promise support
2016-02-08 10:12:37 +01:00
Ignat Shining de2e4bb5eb Move babel-polyfill to loadtests.js 2016-02-08 10:15:35 +03:00
Ignat Shining eceb3c6a28 PhantomJS Promise support 2016-02-06 23:39:16 +03:00
Chris 9da1b7caeb 1.4.0 2016-02-02 08:10:46 +01:00
Chris e1597a4807 Updated changelog for release 1.4 2016-02-02 08:10:39 +01:00
Chris 9b062b4d87 Merge pull request #24 from kashiif/fix-dev-config
Use defaultConfig.port in dev env instead of hard coded 8000
2016-02-02 07:52:11 +01:00
Kashif Iqbal Khan 0f019fe2c7 use defaultConfig.port in dev env instead of hard coded 8000 2016-02-01 20:19:59 +11:00
Chris f556d20d57 Updated changelog for 1.4 2016-01-29 21:43:49 +01:00
Chris b0014e00e0 Refactoring: Removed lodash as dependency, refactored webpack config (including minor speed improvements) 2016-01-29 21:42:24 +01:00
Chris b3abd3159d 1.3.1 2016-01-29 13:54:38 +01:00
Chris f56a70b13d Fix: Removed karma-phantomjs-shim from packages list and karma (it is no longer needed in phantomjs 2) 2016-01-29 13:54:28 +01:00
Chris 1a12e83eb0 1.3.0 2016-01-29 13:32:49 +01:00
Chris d0720735be Updated phantomjs to 2.0 2016-01-29 13:32:39 +01:00
Chris 32fb22fbe6 1.2.1 2016-01-13 07:51:50 +01:00
Chris 9c921f608d Adjusted changelog for v1.2.1 2016-01-13 07:51:40 +01:00
Chris 834fe2569d Updated lodash to current stable, cleaned up unit test formatting 2016-01-13 07:50:37 +01:00
20 changed files with 180 additions and 128 deletions
+10 -5
View File
@@ -3,15 +3,19 @@
"plugins": [ "plugins": [
"react" "react"
], ],
"ecmaFeatures": { "parserOptions": {
"jsx": true, "ecmaVersion": 6,
"modules": true "sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
}, },
"env": { "env": {
"browser": true, "browser": true,
"amd": true, "amd": true,
"es6": true, "es6": true,
"node": true "node": true,
"mocha": true
}, },
"rules": { "rules": {
"comma-dangle": 1, "comma-dangle": 1,
@@ -25,6 +29,7 @@
"no-trailing-spaces": [1, { "skipBlankLines": true }], "no-trailing-spaces": [1, { "skipBlankLines": true }],
"no-unreachable": 1, "no-unreachable": 1,
"no-alert": 0, "no-alert": 0,
"react/jsx-uses-react": 1 "react/jsx-uses-react": 1,
"react/jsx-uses-vars": 1
} }
} }
+39
View File
@@ -1,5 +1,44 @@
# react-webpack-template - Changelog # react-webpack-template - Changelog
## 1.5.3:
1. Asset paths are now relative (makes it easier to use bundles in subdirectories)
2. Removed loading problems for webpack configurations overriding (see https://github.com/newtriks/generator-react-webpack/issues/194)
3. Added missing loader configuration for movies and svg file types
## 1.5.2:
1. Updated dependencies to latests (babel-eslint, eslint, karma-mocha-reporter, normalize.css)
## 1.5.1:
1. Emergency fix for correct eslint version (2.3 is currently buggy). Fixes https://github.com/newtriks/generator-react-webpack/issues/196
2. Added mocha to eslint global config as requested in https://github.com/newtriks/generator-react-webpack/issues/195
## 1.5.0:
1. Added babel polyfill to tests per default (provided by [Igonato](https://github.com/Igonato))
2. Updated eslint to version 2.0
3. Updated glob package to version 7.0
## 1.4.0:
1. Refactored webpack config to use Object.assign instead of lodash
2. Added dynamic port for webpack dev server (provided by [kashiif](https://github.com/kashiif))
## 1.3.1:
1. Removed karma-phantomjs-shim (with PhantomJS 2 there is no need for shims anymore)
## 1.3.0:
1. Updated phantomjs to 2.0
## 1.2.1:
1. Updated lodash to latest stable version
2. Cleaned up formatting of unittests
## 1.2.0: ## 1.2.0:
1. Updated core-js to new 2.0 stable 1. Updated core-js to new 2.0 stable
+3 -4
View File
@@ -9,15 +9,12 @@ The following features are currently included:
- [x] Webpack and Webpack-Dev-Server, including hot-loader - [x] Webpack and Webpack-Dev-Server, including hot-loader
- [x] Babel and JSX - [x] Babel and JSX
- [x] Mocha Unit tests (*optional*) - [x] Mocha Unit tests
- [x] esLint Support - [x] esLint Support
- [x] No dependency on grunt, gulp or the next hot taskrunner! - [x] No dependency on grunt, gulp or the next hot taskrunner!
- [x] Support for environment-specific configuration files - [x] Support for environment-specific configuration files
- [x] Support for code coverage via [isparta-loader](https://github.com/deepsweet/isparta-loader) - [x] Support for code coverage via [isparta-loader](https://github.com/deepsweet/isparta-loader)
## Todo
- [ ] Better performance for webpack builds
## What is it for? ## What is it for?
This template can be used directly for the creation of new projects. When using it like this, make sure to ___not___ install it via npm but download it directly. The template is (nearly) useless for itself when downloaded via npm! This template can be used directly for the creation of new projects. When using it like this, make sure to ___not___ install it via npm but download it directly. The template is (nearly) useless for itself when downloaded via npm!
@@ -111,3 +108,5 @@ react-webpack-template is available under MIT-License and can therefore be used
- Christian Schilling (cs@weblogixx.de) - Christian Schilling (cs@weblogixx.de)
- Martin Jul (martin@mjul.com) - Martin Jul (martin@mjul.com)
- Stephan Herzog (sthzgvie@gmail.com) - Stephan Herzog (sthzgvie@gmail.com)
- Kashif Iqbal Khan
- Ignat Shining (mail@igonato.com)
+13 -49
View File
@@ -1,9 +1,6 @@
'use strict'; 'use strict';
let path = require('path'); let path = require('path');
let defaultSettings = require('./defaults');
let port = 8000;
let srcPath = path.join(__dirname, '/../src');
let publicPath = '/assets/';
// Additional npm or bower modules to include in builds // Additional npm or bower modules to include in builds
// Add all foreign plugins you may need into this array // Add all foreign plugins you may need into this array
@@ -14,65 +11,32 @@ let additionalPaths = [];
module.exports = { module.exports = {
additionalPaths: additionalPaths, additionalPaths: additionalPaths,
port: port, port: defaultSettings.port,
debug: true, debug: true,
devtool: 'eval',
output: { output: {
path: path.join(__dirname, '/../dist/assets'), path: path.join(__dirname, '/../dist/assets'),
filename: 'app.js', filename: 'app.js',
publicPath: publicPath publicPath: `.${defaultSettings.publicPath}`
}, },
devServer: { devServer: {
contentBase: './src/', contentBase: './src/',
historyApiFallback: true, historyApiFallback: true,
hot: true, hot: true,
port: port, port: defaultSettings.port,
publicPath: publicPath, publicPath: defaultSettings.publicPath,
noInfo: false noInfo: false
}, },
resolve: { resolve: {
extensions: ['', '.js', '.jsx'], extensions: ['', '.js', '.jsx'],
alias: { alias: {
actions: srcPath + '/actions/', actions: `${defaultSettings.srcPath}/actions/`,
components: srcPath + '/components/', components: `${defaultSettings.srcPath}/components/`,
sources: srcPath + '/sources/', sources: `${defaultSettings.srcPath}/sources/`,
stores: srcPath + '/stores/', stores: `${defaultSettings.srcPath}/stores/`,
styles: srcPath + '/styles/', styles: `${defaultSettings.srcPath}/styles/`,
config: srcPath + '/config/' + process.env.REACT_WEBPACK_ENV config: `${defaultSettings.srcPath}/config/` + process.env.REACT_WEBPACK_ENV
} }
}, },
module: { module: {}
preLoaders: [
{
test: /\.(js|jsx)$/,
include: srcPath,
loader: 'eslint-loader'
}
],
loaders: [
{
test: /\.css$/,
loader: 'style-loader!css-loader'
},
{
test: /\.sass/,
loader: 'style-loader!css-loader!sass-loader?outputStyle=expanded&indentedSyntax'
},
{
test: /\.scss/,
loader: 'style-loader!css-loader!sass-loader?outputStyle=expanded'
},
{
test: /\.less/,
loader: 'style-loader!css-loader!less-loader'
},
{
test: /\.styl/,
loader: 'style-loader!css-loader!stylus-loader'
},
{
test: /\.(png|jpg|gif|woff|woff2)$/,
loader: 'url-loader?limit=8192'
}
]
}
}; };
+64
View File
@@ -0,0 +1,64 @@
/**
* Function that returns default values.
* Used because Object.assign does a shallow instead of a deep copy.
* Using [].push will add to the base array, so a require will alter
* the base array output.
*/
'use strict';
const path = require('path');
const srcPath = path.join(__dirname, '/../src');
const dfltPort = 8000;
/**
* Get the default modules object for webpack
* @return {Object}
*/
function getDefaultModules() {
return {
preLoaders: [
{
test: /\.(js|jsx)$/,
include: srcPath,
loader: 'eslint-loader'
}
],
loaders: [
{
test: /\.css$/,
loader: 'style-loader!css-loader'
},
{
test: /\.sass/,
loader: 'style-loader!css-loader!sass-loader?outputStyle=expanded&indentedSyntax'
},
{
test: /\.scss/,
loader: 'style-loader!css-loader!sass-loader?outputStyle=expanded'
},
{
test: /\.less/,
loader: 'style-loader!css-loader!less-loader'
},
{
test: /\.styl/,
loader: 'style-loader!css-loader!stylus-loader'
},
{
test: /\.(png|jpg|gif|woff|woff2)$/,
loader: 'url-loader?limit=8192'
},
{
test: /\.(mp4|ogg|svg)$/,
loader: 'file-loader'
}
]
};
}
module.exports = {
srcPath: srcPath,
publicPath: '/assets/',
port: dfltPort,
getDefaultModules: getDefaultModules
};
+8 -8
View File
@@ -2,31 +2,31 @@
let path = require('path'); let path = require('path');
let webpack = require('webpack'); let webpack = require('webpack');
let _ = require('lodash');
let baseConfig = require('./base'); let baseConfig = require('./base');
let defaultSettings = require('./defaults');
// Add needed plugins here // Add needed plugins here
let BowerWebpackPlugin = require('bower-webpack-plugin'); let BowerWebpackPlugin = require('bower-webpack-plugin');
let config = _.merge({ let config = Object.assign({}, baseConfig, {
entry: [ entry: [
'webpack-dev-server/client?http://127.0.0.1:8000', 'webpack-dev-server/client?http://127.0.0.1:' + defaultSettings.port,
'webpack/hot/only-dev-server', 'webpack/hot/only-dev-server',
'./src/index' './src/index'
], ],
cache: true, cache: true,
devtool: 'eval', devtool: 'eval-source-map',
plugins: [ plugins: [
new webpack.HotModuleReplacementPlugin(), new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(), new webpack.NoErrorsPlugin(),
new BowerWebpackPlugin({ new BowerWebpackPlugin({
searchResolveModulesDirectories: false searchResolveModulesDirectories: false
}) })
] ],
}, baseConfig); module: defaultSettings.getDefaultModules()
});
// Add needed loaders // Add needed loaders to the defaults here
config.module.loaders.push({ config.module.loaders.push({
test: /\.(js|jsx)$/, test: /\.(js|jsx)$/,
loader: 'react-hot!babel-loader', loader: 'react-hot!babel-loader',
+6 -4
View File
@@ -2,14 +2,14 @@
let path = require('path'); let path = require('path');
let webpack = require('webpack'); let webpack = require('webpack');
let _ = require('lodash');
let baseConfig = require('./base'); let baseConfig = require('./base');
let defaultSettings = require('./defaults');
// Add needed plugins here // Add needed plugins here
let BowerWebpackPlugin = require('bower-webpack-plugin'); let BowerWebpackPlugin = require('bower-webpack-plugin');
let config = _.merge({ let config = Object.assign({}, baseConfig, {
entry: path.join(__dirname, '../src/index'), entry: path.join(__dirname, '../src/index'),
cache: false, cache: false,
devtool: 'sourcemap', devtool: 'sourcemap',
@@ -25,9 +25,11 @@ let config = _.merge({
new webpack.optimize.OccurenceOrderPlugin(), new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.AggressiveMergingPlugin(), new webpack.optimize.AggressiveMergingPlugin(),
new webpack.NoErrorsPlugin() new webpack.NoErrorsPlugin()
] ],
}, baseConfig); module: defaultSettings.getDefaultModules()
});
// Add needed loaders to the defaults here
config.module.loaders.push({ config.module.loaders.push({
test: /\.(js|jsx)$/, test: /\.(js|jsx)$/,
loader: 'babel', loader: 'babel',
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

+1 -1
View File
@@ -9,7 +9,7 @@ module.exports = function(config) {
], ],
port: 8080, port: 8080,
captureTimeout: 60000, captureTimeout: 60000,
frameworks: [ 'phantomjs-shim', 'mocha', 'chai' ], frameworks: [ 'mocha', 'chai' ],
client: { client: {
mocha: {} mocha: {}
}, },
+10 -11
View File
@@ -1,6 +1,6 @@
{ {
"name": "react-webpack-template", "name": "react-webpack-template",
"version": "1.2.0", "version": "1.5.3",
"description": "A base skeleton template for react and webpack without task runners", "description": "A base skeleton template for react and webpack without task runners",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
@@ -37,35 +37,34 @@
"homepage": "https://github.com/weblogixx/react-webpack-template#readme", "homepage": "https://github.com/weblogixx/react-webpack-template#readme",
"devDependencies": { "devDependencies": {
"babel-core": "^6.0.0", "babel-core": "^6.0.0",
"babel-eslint": "^5.0.0-beta4", "babel-eslint": "^6.0.0",
"babel-loader": "^6.0.0", "babel-loader": "^6.0.0",
"babel-polyfill": "^6.3.14",
"babel-preset-es2015": "^6.0.15", "babel-preset-es2015": "^6.0.15",
"babel-preset-react": "^6.0.15", "babel-preset-react": "^6.0.15",
"bower-webpack-plugin": "^0.1.9", "bower-webpack-plugin": "^0.1.9",
"chai": "^3.2.0", "chai": "^3.2.0",
"copyfiles": "^0.2.1", "copyfiles": "^0.2.1",
"css-loader": "^0.23.0", "css-loader": "^0.23.0",
"eslint": "^1.2.1", "eslint": "^2.2.0",
"eslint-loader": "^1.0.0", "eslint-loader": "^1.0.0",
"eslint-plugin-react": "^3.3.0", "eslint-plugin-react": "^4.0.0",
"file-loader": "^0.8.4", "file-loader": "^0.8.4",
"glob": "^6.0.0", "glob": "^7.0.0",
"isparta-instrumenter-loader": "^1.0.0", "isparta-instrumenter-loader": "^1.0.0",
"karma": "^0.13.9", "karma": "^0.13.9",
"karma-chai": "^0.1.0", "karma-chai": "^0.1.0",
"karma-coverage": "^0.5.3", "karma-coverage": "^0.5.3",
"karma-mocha": "^0.2.0", "karma-mocha": "^0.2.0",
"karma-mocha-reporter": "^1.1.1", "karma-mocha-reporter": "^2.0.0",
"karma-phantomjs-launcher": "^0.2.1", "karma-phantomjs-launcher": "^1.0.0",
"karma-phantomjs-shim": "^1.1.1",
"karma-sourcemap-loader": "^0.3.5", "karma-sourcemap-loader": "^0.3.5",
"karma-webpack": "^1.7.0", "karma-webpack": "^1.7.0",
"lodash": "^3.10.1",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"mocha": "^2.2.5", "mocha": "^2.2.5",
"null-loader": "^0.1.1", "null-loader": "^0.1.1",
"open": "0.0.5", "open": "0.0.5",
"phantomjs": "^1.9.18", "phantomjs-prebuilt": "^2.0.0",
"react-addons-test-utils": "^0.14.0", "react-addons-test-utils": "^0.14.0",
"react-hot-loader": "^1.2.9", "react-hot-loader": "^1.2.9",
"rimraf": "^2.4.3", "rimraf": "^2.4.3",
@@ -76,7 +75,7 @@
}, },
"dependencies": { "dependencies": {
"core-js": "^2.0.0", "core-js": "^2.0.0",
"normalize.css": "^3.0.3", "normalize.css": "^4.0.0",
"react": "^0.14.0", "react": "^0.14.0",
"react-dom": "^0.14.0" "react-dom": "^0.14.0"
} }
+6 -5
View File
@@ -1,12 +1,13 @@
/*eslint no-console:0 */ /*eslint no-console:0 */
'use strict';
require('core-js/fn/object/assign'); require('core-js/fn/object/assign');
var webpack = require('webpack'); const webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server'); const WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config'); const config = require('./webpack.config');
var open = require('open'); const open = require('open');
new WebpackDevServer(webpack(config), config.devServer) new WebpackDevServer(webpack(config), config.devServer)
.listen(config.port, 'localhost', function(err) { .listen(config.port, 'localhost', (err) => {
if (err) { if (err) {
console.log(err); console.log(err);
} }
+1 -1
View File
@@ -1,4 +1,4 @@
require('normalize.css'); require('normalize.css/normalize.css');
require('styles/App.css'); require('styles/App.css');
import React from 'react'; import React from 'react';
-1
View File
@@ -1,6 +1,5 @@
'use strict'; 'use strict';
// Settings configured here will be merged into the final config object. // Settings configured here will be merged into the final config object.
export default { export default {
} }
-1
View File
@@ -2,7 +2,6 @@
import baseConfig from './base'; import baseConfig from './base';
let config = { let config = {
appEnv: 'dev' // feel free to remove the appEnv property here appEnv: 'dev' // feel free to remove the appEnv property here
}; };
-2
View File
@@ -2,10 +2,8 @@
import baseConfig from './base'; import baseConfig from './base';
let config = { let config = {
appEnv: 'dist' // feel free to remove the appEnv property here appEnv: 'dist' // feel free to remove the appEnv property here
}; };
export default Object.freeze(Object.assign({}, baseConfig, config)); export default Object.freeze(Object.assign({}, baseConfig, config));
-2
View File
@@ -2,10 +2,8 @@
import baseConfig from './base'; import baseConfig from './base';
let config = { let config = {
appEnv: 'test' // don't remove the appEnv property here appEnv: 'test' // don't remove the appEnv property here
}; };
export default Object.freeze(Object.assign(baseConfig, config)); export default Object.freeze(Object.assign(baseConfig, config));
+1 -1
View File
@@ -11,6 +11,6 @@
<div id="app">APPLICATION CONTENT</div> <div id="app">APPLICATION CONTENT</div>
<script>__REACT_DEVTOOLS_GLOBAL_HOOK__ = parent.__REACT_DEVTOOLS_GLOBAL_HOOK__</script> <script>__REACT_DEVTOOLS_GLOBAL_HOOK__ = parent.__REACT_DEVTOOLS_GLOBAL_HOOK__</script>
<script type="text/javascript" src="assets/app.js"></script> <script type="text/javascript" src="./assets/app.js"></script>
</body> </body>
</html> </html>
+7 -7
View File
@@ -11,13 +11,13 @@ import createComponent from 'helpers/shallowRenderHelper';
import Main from 'components/Main'; import Main from 'components/Main';
describe('MainComponent', () => { describe('MainComponent', () => {
let MainComponent; let MainComponent;
beforeEach(() => { beforeEach(() => {
MainComponent = createComponent(Main); MainComponent = createComponent(Main);
}); });
it('should have its component name as default className', () => { it('should have its component name as default className', () => {
expect(MainComponent.props.className).to.equal('index'); expect(MainComponent.props.className).to.equal('index');
}); });
}); });
+1
View File
@@ -1,5 +1,6 @@
'use strict'; 'use strict';
require('babel-polyfill');
require('core-js/fn/object/assign'); require('core-js/fn/object/assign');
// Add support for all files in the test directory // Add support for all files in the test directory
+10 -26
View File
@@ -1,14 +1,14 @@
'use strict'; 'use strict';
var path = require('path'); const path = require('path');
var args = require('minimist')(process.argv.slice(2)); const args = require('minimist')(process.argv.slice(2));
// List of allowed environments // List of allowed environments
var allowedEnvs = ['dev', 'dist', 'test']; const allowedEnvs = ['dev', 'dist', 'test'];
// Set the correct environment // Set the correct environment
var env; var env;
if(args._.length > 0 && args._.indexOf('start') !== -1) { if (args._.length > 0 && args._.indexOf('start') !== -1) {
env = 'test'; env = 'test';
} else if (args.env) { } else if (args.env) {
env = args.env; env = args.env;
@@ -17,32 +17,16 @@ if(args._.length > 0 && args._.indexOf('start') !== -1) {
} }
process.env.REACT_WEBPACK_ENV = env; process.env.REACT_WEBPACK_ENV = env;
// Get available configurations
var configs = {
base: require(path.join(__dirname, 'cfg/base')),
dev: require(path.join(__dirname, 'cfg/dev')),
dist: require(path.join(__dirname, 'cfg/dist')),
test: require(path.join(__dirname, 'cfg/test'))
};
/**
* Get an allowed environment
* @param {String} env
* @return {String}
*/
function getValidEnv(env) {
var isValid = env && env.length > 0 && allowedEnvs.indexOf(env) !== -1;
return isValid ? env : 'dev';
}
/** /**
* Build the webpack configuration * Build the webpack configuration
* @param {String} env Environment to use * @param {String} wantedEnv The wanted environment
* @return {Object} Webpack config * @return {Object} Webpack config
*/ */
function buildConfig(env) { function buildConfig(wantedEnv) {
var usedEnv = getValidEnv(env); let isValid = wantedEnv && wantedEnv.length > 0 && allowedEnvs.indexOf(wantedEnv) !== -1;
return configs[usedEnv]; let validEnv = isValid ? wantedEnv : 'dev';
let config = require(path.join(__dirname, 'cfg/' + validEnv));
return config;
} }
module.exports = buildConfig(env); module.exports = buildConfig(env);