Compare commits

..

81 Commits

Author SHA1 Message Date
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
Chris 9243cbfe57 1.2.0 2015-12-28 08:13:36 +01:00
Chris fcd1fe5ad1 Updated core-js, moved some dependencies to devDependencies, moved component runner to source root 2015-12-28 08:13:18 +01:00
Chris 27621bdd78 Merge pull request #19 from stylesuxx/flux-agnostic
Moved run script to root of src folder
2015-12-28 07:59:48 +01:00
stylesuxx d8d510a67d Moved run script to root of src folder and renamed it to index.j. Updated config files to use this as entry point to the template 2015-12-18 11:28:43 +01:00
Chris 5ec8667f0f Merge pull request #17 from harunhasdal/cleanup-dependencies
Move core-js, lodash and react-addons-test-utils to devDependencies
2015-12-16 08:47:02 +01:00
harunhasdal fdf5601791 Move core-js back out of devDependencies 2015-12-15 13:45:28 +00:00
harunhasdal 746e738443 Move core-js, lodash and react-addons-test-utils to devDependencies 2015-12-15 12:50:46 +00:00
Chris bed8436802 1.1.0 2015-12-11 09:00:14 +01:00
Chris cf5093cd39 Added better support for external package includes 2015-12-11 09:00:04 +01:00
Chris f4fcd9111e 1.0.3 2015-12-04 09:24:40 +01:00
Chris 73fffaf9b9 Added support for babel-eslint (as suggested in https://github.com/newtriks/generator-react-webpack/issues/173) 2015-12-04 09:24:22 +01:00
Chris c6901b226a Merge pull request #16 from HelloYie/master
fix eslint-loader path error (Provided by @HelloYie)
2015-11-30 12:43:22 +01:00
HelloYie 7742d6d89b fix eslint-loader path error 2015-11-30 18:58:10 +08:00
Chris bcfc2f429f Merge pull request #13 from sthzg/feat_update_app_config
Config -- added base config object for env-independent settings (Provided by @sthzg)
2015-11-23 09:09:09 +01:00
sthzg 6d886d8bbc Config -- added base config object for env-independent settings 2015-11-20 13:28:22 +01:00
Chris b55b6f9216 1.0.2 2015-11-20 08:36:05 +01:00
Chris 3c46890e3f Updated dev dependencies to latest versions 2015-11-20 08:35:53 +01:00
Chris c4e5b5448f Merge pull request #15 from stylesuxx/feature/css
Changed loader names for sake of consistency (Provided by @stylesuxx)
2015-11-19 07:26:09 +01:00
stylesuxx c4855a696b Changed loader names for sake of consistency 2015-11-18 23:20:49 +01:00
Chris fb1f271f6b 1.0.1 2015-11-18 08:12:34 +01:00
Chris 5d512c5bf5 Adjusted changelog to reflect isparta update 2015-11-18 08:08:51 +01:00
Chris 9ecfa9ef90 Added fix for isparta version update 2015-11-18 08:06:51 +01:00
Chris 614fcfc54e 1.0.0 2015-11-17 07:39:46 +01:00
Chris bbd0f7666e Updated babel to 6.0 2015-11-17 07:39:34 +01:00
Chris 33150f0cf6 Reverted fix for config merge. 2015-10-29 08:34:29 +01:00
Chris 831fb6f8b9 Merge branch 'master' of https://github.com/weblogixx/react-webpack-template 2015-10-29 08:32:34 +01:00
Chris 2538e2c405 Reverted fix for config merge. 2015-10-29 08:32:27 +01:00
Chris 4cd213706e Merge pull request #10 from mjul/merge_order
Fix override order for base.js and dev.js / dist.js
2015-10-29 08:03:40 +01:00
Martin Jul b3f99eb73e Fix override order for base.js and dev.js / dist.js 2015-10-27 23:27:18 +01:00
Chris a6867e3c9f 0.3.2 2015-10-27 08:47:03 +01:00
Chris 827dd86a3c Added support for bower components, as requested in https://github.com/weblogixx/react-webpack-template/issues/8 2015-10-27 08:45:12 +01:00
Chris 89f6f1701b Added support for coverage reporting (as requested in https://github.com/newtriks/generator-react-webpack/issues/158) 2015-10-27 08:08:26 +01:00
Chris ed4e8a17f3 0.3.1 2015-10-23 09:46:08 +02:00
Chris 99ef0116e0 Updated changelog for 0.3.1 2015-10-23 09:45:53 +02:00
Chris 3027a257aa Added new dev dependencies and some badges 2015-10-23 09:41:39 +02:00
Chris 65ffe317bc Merge pull request #7 from mjul/autowatch
Update by @mjul: Don't rely Karma autoWatch being true in config
2015-10-23 00:08:57 +02:00
Martin Jul 61a6776cc8 Don't rely Karma autoWatch being true in config 2015-10-22 23:36:13 +02:00
Chris d548936421 Updated changelog to reflect new pull requests. 2015-10-22 12:47:03 +02:00
Chris d2b6d1a7ac 0.3.0 2015-10-22 12:44:58 +02:00
Chris d49fa2cc22 Merge pull request #6 from sthzg/feat_check_production_builds
Feature from @sthzg: #4 -- added DefinePlugin to plugins for dist builds (see https://github.com/weblogixx/react-webpack-template/issues/4)
2015-10-22 12:41:27 +02:00
sthzg 448ad72b83 #4 -- added DefinePlugin to plugins for dist builds 2015-10-22 10:58:39 +02:00
Chris e167efec72 Updated README with new phrasing (it IS the base for generator-react-webpack now) 2015-10-21 16:06:42 +02:00
Chris 71d7fa388d Merge pull request #5 from sthzg/feat_env_based_app_configs
Feature from @sthzg: #1 -- added support to import app configuration based on --env
2015-10-21 15:47:36 +02:00
sthzg 236012dea6 #1 -- added support to import app configuration based on --env 2015-10-21 12:37:52 +02:00
Chris 8550022eb5 Merge pull request #3 from mjul/patch-1
Feature by @mjul: Add target to run tests continuously
2015-10-21 07:45:25 +02:00
Martin Jul 1424f8f41d Add info on running tests continuously 2015-10-20 16:25:32 +02:00
Martin Jul e710db370c Add target to run tests continuously
Enables `npm run test:watch`
2015-10-20 16:15:57 +02:00
Chris 00414460b2 0.2.2 2015-10-19 10:46:21 +02:00
Chris f1eb6504e0 Added current version of webpack-dev-server to dependencies list 2015-10-19 10:46:10 +02:00
Chris 515969e6be 0.2.1 2015-10-16 07:58:19 +02:00
Chris 05a06a819a Added jsx-uses-react flag in eslint to prevent false positives about react included but not used in components. 2015-10-16 07:57:39 +02:00
Chris 2188e5cd0b 0.2.0 2015-10-12 07:57:52 +02:00
Chris 4e4993e5b5 Added compatibility for react 0.14 2015-10-12 07:57:40 +02:00
Chris 5d46050bbb Added travis badge 2015-10-07 08:48:47 +02:00
Chris b40367218f Added travis support 2015-10-07 08:46:27 +02:00
29 changed files with 490 additions and 159 deletions
+6
View File
@@ -0,0 +1,6 @@
{
"presets": [
"es2015",
"react"
]
}
+12 -5
View File
@@ -1,16 +1,21 @@
{
"parser": "babel-eslint",
"plugins": [
"react"
],
"ecmaFeatures": {
"jsx": true,
"modules": true
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"env": {
"browser": true,
"amd": true,
"es6": true,
"node": true
"node": true,
"mocha": true
},
"rules": {
"comma-dangle": 1,
@@ -23,6 +28,8 @@
"no-unused-vars": 1,
"no-trailing-spaces": [1, { "skipBlankLines": true }],
"no-unreachable": 1,
"no-alert": 0
"no-alert": 0,
"react/jsx-uses-react": 1,
"react/jsx-uses-vars": 1
}
}
+3
View File
@@ -25,3 +25,6 @@ build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
# Bower
bower_components/
+6
View File
@@ -0,0 +1,6 @@
language: node_js
node_js:
- '4.1.0'
before_install:
- currentfolder=${PWD##*/}
- if [ "$currentfolder" != 'react-webpack-template' ]; then cd .. && eval "mv $currentfolder react-webpack-template" && cd react-webpack-template; fi
+99
View File
@@ -0,0 +1,99 @@
# react-webpack-template - Changelog
## 1.5.2:
1. Updated dependencies to latests (babel-eslint, eslint, karma-mocha-reporter, normalize.css)
## 1.5.1:
1. Emergency fix for corruct 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. Updated core-js to new 2.0 stable
2. Moved lodash and react-addons-testutils to devDependencies (provided by [harunhasdal](https://github.com/harunhasdal))
3. Moved run component from ```src/components/run.js``` to ```src/index.js``` (provided by [stylesuxx](https://github.com/stylesuxx))
## 1.1.0:
1. Added support for easier webpack include management (can now be set via cfg/base.js, see README.md)
## 1.0.3:
1. Support for config independent settings in ```src/config/base.js``` (provided by [sthzg](https://github.com/sthzg))
2. Fixed eslint loader path (provided by [HelloYie](https://github.com/HelloYie))
3. Added support for babel-eslint (as suggested in https://github.com/newtriks/generator-react-webpack/issues/173)
## 1.0.2:
1. Added babel-eslint (as suggested in https://github.com/newtriks/generator-react-webpack/issues/173)
## 1.0.2:
1. Updated css-loader to current stable (0.23)
2. Updated glob to new major (5.x to 6.x)
## 1.0.1:
___Upgrades___:
1. Updated isparta-instrumenter-loader to new version 1.0
## 1.0.0:
___Upgrades___:
1. Updated to babel core version (6.0.x)
2. Replaced isparta-loader with the more current (and better maintained) isparta-instrumenter-loader.
## 0.3.2:
___Features___:
1. Added support for bower components in webpack
2. Added coverage reporting via karma-coverage
## 0.3.1:
___Upgrades___:
1. Added bugfix for tests in watch mode (could be overridden by config)
2. Added new badges to README
3. Updated devDependencies to current ones
## 0.3.0:
___Upgrades___:
1. Added webpacks define plugin for dist version
2. Added new task ```test:watch``` to watch for changes
## 0.2.0:
___Upgrades:___
1. Updated React from 0.13 to 0.14 (using ```^0.14```) as version string. This included minor code changes for components (now use the splitted "React"-Package) and the runner (Using React-DOM).
2. Updated the shallow renderer for unit tests.
___Backwards incompatible changes:___
1. Default unit tests do not need to traverse down to `Component._store.props`, but directly to `Component.props`. Please keep this in mind when using properties in your tests.
+1 -2
View File
@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2015 Chris
Copyright (c) 2015 Christian Schilling <cs@weblogixx.de>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+59 -14
View File
@@ -1,27 +1,28 @@
# Welcome to react-webpack-template
This repository holds a base template for the new version of generator-react-webpack.
It can be understood as the prototype for newly generated projects.
> This repository holds the base template for the current version of [generator-react-webpack](https://github.com/newtriks/generator-react-webpack).
It can also be used as the prototype for newly generated projects.
[![Build Status](https://travis-ci.org/weblogixx/react-webpack-template.svg)](https://travis-ci.org/weblogixx/react-webpack-template) ![Amount of Downloads per month](https://img.shields.io/npm/dm/react-webpack-template.svg "Amount of Downloads") ![Dependency Tracker](https://img.shields.io/david/weblogixx/react-webpack-template.svg "Dependency Tracker") ![Dependency Tracker](https://img.shields.io/david/dev/weblogixx/react-webpack-template.svg "Dependency Tracker")
## Features
The following features are planned to be included in the final version:
The following features are currently included:
- [x] Webpack and Webpack-Dev-Server, including hot-loader
- [x] Babel and JSX
- [x] Mocha Unit tests (*optional*)
- [x] EsLint Support
- [x] Mocha Unit tests
- [x] esLint Support
- [x] No dependency on grunt, gulp or the next hot taskrunner!
- [x] The dynamic webpack configuration is clunky, there must be a better way to do that!
- [x] Karmas webpack configuration is not included in the global webpack.config.js file, but it really should
## Todo
- [ ] Better performance for webpack builds
- [x] Support for environment-specific configuration files
- [x] Support for code coverage via [isparta-loader](https://github.com/deepsweet/isparta-loader)
## What is it for?
This template can be used directly for the creation of new projects.
Also it will be the "template" for the next version of generator-react-webpack.
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!
Basically, it is currently only used as the base template of [generator-react-webpack](https://github.com/newtriks/generator-react-webpack).
## Using it
The template is available via webpack. The following commands are available:
The template uses webpack as build tool to serve files and run tests. The following commands are available:
```bash
# Start for development
npm start # or
@@ -36,6 +37,9 @@ npm run dist
# Run unit tests
npm test
# Run the unit tests continuously (repeat the test when code changes are saved)
npm run test:watch
# Lint all files in src (also automatically done AFTER tests are run)
npm run lint
@@ -47,6 +51,7 @@ npm run copy
```
You can also use your globally installed version of webpack like this:
```bash
# Build or run the dev version:
webpack
@@ -60,8 +65,48 @@ webpack --env=dist
webpack-dev-server --env=dist
```
## Including third party modules (e.g. from npm)
The default setting for the webpack configuration is to only include the ```src``` and ```test``` directories. If you want to add any modules from npm, you have to add them in ```cfg/base.js```. One example is:
```javascript
// Somewhere on top of the file:
let npmBase = path.join(__dirname, '../node_modules');
let additionalPaths = [ path.join(npmBase, 'react-bootstrap') ];
```
All entries added to the additionalPaths array will be appended to the include path for babel.
## A note on unit testing
When running tests, coverage information (provided via Istanbul) will also be written into the ```coverage/``` directory. If you do not need this, just comment out or remove the section in ```karma.conf``` like this:
```javascript
/* do not use coverage reporting!
coverageReporter: {
type: 'html',
dir: 'coverage/'
}*/
```
Also, you should adjust your webpack test configuration (located in ```cfg/test.js```) to reflect this:
```javascript
/* Uncomment this to prevent loading via isparta
{
test: /\.(js|jsx)$/,
loader: 'babel-loader',
include: [
path.join(__dirname, '/../src')
],
loader: 'isparta'
}*/
```
## License
react-webpack-template is available under MIT-License and can therefore be used in any project free of charge.
## Contributors
- Weblogixx (cs@weblogixx.de)
- Christian Schilling (cs@weblogixx.de)
- Martin Jul (martin@mjul.com)
- Stephan Herzog (sthzgvie@gmail.com)
- Kashif Iqbal Khan
- Ignat Shining (mail@igonato.com)
+22 -48
View File
@@ -1,68 +1,42 @@
var path = require('path');
'use strict';
let path = require('path');
let defaultSettings = require('./defaults');
var port = 8000;
var srcPath = path.join(__dirname, '/../src');
var publicPath = '/assets/';
// Additional npm or bower modules to include in builds
// Add all foreign plugins you may need into this array
// @example:
// let npmBase = path.join(__dirname, '../node_modules');
// let additionalPaths = [ path.join(npmBase, 'react-bootstrap') ];
let additionalPaths = [];
module.exports = {
port: port,
additionalPaths: additionalPaths,
port: defaultSettings.port,
debug: true,
devtool: 'eval',
output: {
path: path.join(__dirname, '/../dist/assets'),
filename: 'app.js',
publicPath: publicPath
publicPath: defaultSettings.publicPath
},
devServer: {
contentBase: './src/',
historyApiFallback: true,
hot: true,
port: port,
publicPath: publicPath,
port: defaultSettings.port,
publicPath: defaultSettings.publicPath,
noInfo: false
},
resolve: {
extensions: ['', '.js', '.jsx'],
alias: {
actions: srcPath + '/actions/',
components: srcPath + '/components/',
sources: srcPath + '/sources/',
stores: srcPath + '/stores/',
styles: srcPath + '/styles/'
actions: `${defaultSettings.srcPath}/actions/`,
components: `${defaultSettings.srcPath}/components/`,
sources: `${defaultSettings.srcPath}/sources/`,
stores: `${defaultSettings.srcPath}/stores/`,
styles: `${defaultSettings.srcPath}/styles/`,
config: `${defaultSettings.srcPath}/config/` + process.env.REACT_WEBPACK_ENV
}
},
module: {
preLoaders: [
{
test: /\.(js|jsx)$/,
include: path.join(__dirname, 'src'),
loader: 'eslint-loader'
}
],
loaders: [
{
test: /\.css$/,
loader: 'style!css'
},
{
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'
}
]
}
module: {}
};
+60
View File
@@ -0,0 +1,60 @@
/**
* 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'
}
]
};
}
module.exports = {
srcPath: srcPath,
publicPath: '/assets/',
port: dfltPort,
getDefaultModules: getDefaultModules
};
+24 -13
View File
@@ -1,28 +1,39 @@
var path = require('path');
var webpack = require('webpack');
var _ = require('lodash');
'use strict';
var baseConfig = require('./base');
let path = require('path');
let webpack = require('webpack');
let baseConfig = require('./base');
let defaultSettings = require('./defaults');
var config = _.merge({
// Add needed plugins here
let BowerWebpackPlugin = require('bower-webpack-plugin');
let config = Object.assign({}, baseConfig, {
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',
'./src/components/run'
'./src/index'
],
cache: true,
devtool: 'eval',
devtool: 'eval-source-map',
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
]
}, baseConfig);
new webpack.NoErrorsPlugin(),
new BowerWebpackPlugin({
searchResolveModulesDirectories: false
})
],
module: defaultSettings.getDefaultModules()
});
// Add needed loaders
// Add needed loaders to the defaults here
config.module.loaders.push({
test: /\.(js|jsx)$/,
loader: 'react-hot!babel-loader',
include: path.join(__dirname, '/../src')
include: [].concat(
config.additionalPaths,
[ path.join(__dirname, '/../src') ]
)
});
module.exports = config;
+25 -9
View File
@@ -1,26 +1,42 @@
var path = require('path');
var webpack = require('webpack');
var _ = require('lodash');
'use strict';
var baseConfig = require('./base');
let path = require('path');
let webpack = require('webpack');
var config = _.merge({
entry: path.join(__dirname, '../src/components/run'),
let baseConfig = require('./base');
let defaultSettings = require('./defaults');
// Add needed plugins here
let BowerWebpackPlugin = require('bower-webpack-plugin');
let config = Object.assign({}, baseConfig, {
entry: path.join(__dirname, '../src/index'),
cache: false,
devtool: 'sourcemap',
plugins: [
new webpack.optimize.DedupePlugin(),
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"'
}),
new BowerWebpackPlugin({
searchResolveModulesDirectories: false
}),
new webpack.optimize.UglifyJsPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.AggressiveMergingPlugin(),
new webpack.NoErrorsPlugin()
]
}, baseConfig);
],
module: defaultSettings.getDefaultModules()
});
// Add needed loaders to the defaults here
config.module.loaders.push({
test: /\.(js|jsx)$/,
loader: 'babel',
include: path.join(__dirname, '/../src')
include: [].concat(
config.additionalPaths,
[ path.join(__dirname, '/../src') ]
)
});
module.exports = config;
+34 -9
View File
@@ -1,9 +1,25 @@
var path = require('path');
var srcPath = path.join(__dirname, '/../src/');
'use strict';
let path = require('path');
let srcPath = path.join(__dirname, '/../src/');
let baseConfig = require('./base');
// Add needed plugins here
let BowerWebpackPlugin = require('bower-webpack-plugin');
module.exports = {
devtool: 'eval',
module: {
preLoaders: [
{
test: /\.(js|jsx)$/,
loader: 'isparta-instrumenter-loader',
include: [
path.join(__dirname, '/../src')
]
}
],
loaders: [
{
test: /\.(png|jpg|gif|woff|woff2|css|sass|scss|less|styl)$/,
@@ -12,22 +28,31 @@ module.exports = {
{
test: /\.(js|jsx)$/,
loader: 'babel-loader',
include: [
path.join(__dirname, '/../src'),
path.join(__dirname, '/../test')
]
include: [].concat(
baseConfig.additionalPaths,
[
path.join(__dirname, '/../src'),
path.join(__dirname, '/../test')
]
)
}
]
},
resolve: {
extensions: ['', '.js', '.jsx'],
extensions: [ '', '.js', '.jsx' ],
alias: {
actions: srcPath + 'actions/',
helpers: path.join(__dirname, '/../test/helpers'),
components: srcPath + 'components/',
sources: srcPath + 'sources/',
stores: srcPath + 'stores/',
styles: srcPath + 'styles/'
styles: srcPath + 'styles/',
config: srcPath + 'config/' + process.env.REACT_WEBPACK_ENV
}
}
},
plugins: [
new BowerWebpackPlugin({
searchResolveModulesDirectories: false
})
]
};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

+11 -4
View File
@@ -3,24 +3,31 @@ var webpackCfg = require('./webpack.config');
module.exports = function(config) {
config.set({
basePath: '',
browsers: ['PhantomJS'],
browsers: [ 'PhantomJS' ],
files: [
'test/loadtests.js'
],
port: 8080,
captureTimeout: 60000,
frameworks: ['phantomjs-shim', 'mocha', 'chai'],
frameworks: [ 'mocha', 'chai' ],
client: {
mocha: {}
},
singleRun: true,
reporters: ['mocha'],
reporters: [ 'mocha', 'coverage' ],
preprocessors: {
'test/loadtests.js': ['webpack', 'sourcemap']
'test/loadtests.js': [ 'webpack', 'sourcemap' ]
},
webpack: webpackCfg,
webpackServer: {
noInfo: true
},
coverageReporter: {
dir: 'coverage/',
reporters: [
{ type: 'html' },
{ type: 'text' }
]
}
});
};
+25 -15
View File
@@ -1,11 +1,12 @@
{
"name": "react-webpack-template",
"version": "0.1.0",
"version": "1.5.2",
"description": "A base skeleton template for react and webpack without task runners",
"main": "server.js",
"scripts": {
"start": "node server.js --env=dev",
"test": "karma start",
"test:watch": "karma start --autoWatch=true --singleRun=false",
"posttest": "npm run lint",
"serve": "node server.js --env=dev",
"serve:dist": "node server.js --env=dist",
@@ -35,38 +36,47 @@
},
"homepage": "https://github.com/weblogixx/react-webpack-template#readme",
"devDependencies": {
"babel-core": "^5.8.22",
"babel-loader": "^5.3.2",
"babel-core": "^6.0.0",
"babel-eslint": "^6.0.0",
"babel-loader": "^6.0.0",
"babel-polyfill": "^6.3.14",
"babel-preset-es2015": "^6.0.15",
"babel-preset-react": "^6.0.15",
"bower-webpack-plugin": "^0.1.9",
"chai": "^3.2.0",
"copyfiles": "^0.2.1",
"css-loader": "^0.16.0",
"eslint": "^1.2.1",
"css-loader": "^0.23.0",
"eslint": "^2.2.0",
"eslint-loader": "^1.0.0",
"eslint-plugin-react": "^3.3.0",
"eslint-plugin-react": "^4.0.0",
"file-loader": "^0.8.4",
"glob": "^7.0.0",
"isparta-instrumenter-loader": "^1.0.0",
"karma": "^0.13.9",
"karma-chai": "^0.1.0",
"karma-coverage": "^0.5.3",
"karma-mocha": "^0.2.0",
"karma-mocha-reporter": "^1.1.1",
"karma-phantomjs-launcher": "^0.2.1",
"karma-phantomjs-shim": "^1.1.1",
"karma-mocha-reporter": "^2.0.0",
"karma-phantomjs-launcher": "^1.0.0",
"karma-sourcemap-loader": "^0.3.5",
"karma-webpack": "^1.7.0",
"minimist": "^1.2.0",
"mocha": "^2.2.5",
"null-loader": "^0.1.1",
"open": "0.0.5",
"phantomjs": "^1.9.18",
"phantomjs-prebuilt": "^2.0.0",
"react-addons-test-utils": "^0.14.0",
"react-hot-loader": "^1.2.9",
"rimraf": "^2.4.3",
"style-loader": "^0.12.3",
"style-loader": "^0.13.0",
"url-loader": "^0.5.6",
"webpack": "^1.12.0",
"webpack-dev-server": "^1.10.1"
"webpack-dev-server": "^1.12.0"
},
"dependencies": {
"lodash": "^3.10.1",
"normalize.css": "^3.0.3",
"react": "^0.13.3"
"core-js": "^2.0.0",
"normalize.css": "^4.0.0",
"react": "^0.14.0",
"react-dom": "^0.14.0"
}
}
+7 -5
View File
@@ -1,11 +1,13 @@
/*eslint no-console:0 */
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');
var open = require('open');
'use strict';
require('core-js/fn/object/assign');
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const config = require('./webpack.config');
const open = require('open');
new WebpackDevServer(webpack(config), config.devServer)
.listen(config.port, 'localhost', function(err) {
.listen(config.port, 'localhost', (err) => {
if (err) {
console.log(err);
}
+2 -2
View File
@@ -1,7 +1,7 @@
require('normalize.css');
require('normalize.css/normalize.css');
require('styles/App.css');
import React from 'react/addons';
import React from 'react';
let yeomanImage = require('../images/yeoman.png');
-5
View File
@@ -1,5 +0,0 @@
import React from 'react';
import App from './Main';
// Render the main component into the dom
React.render(<App />, document.getElementById('app'));
+17
View File
@@ -0,0 +1,17 @@
# About this folder
This folder holds configuration files for different environments.
You can use it to provide your app with different settings based on the
current environment, e.g. to configure different API base urls depending on
whether your setup runs in dev mode or is built for distribution.
You can include the configuration into your code like this:
```javascript
let react = require('react/addons');
let config = require('config');
class MyComponent extends React.Component {
constructor(props) {
super(props);
let currentAppEnv = config.appEnv;
}
}
```
+5
View File
@@ -0,0 +1,5 @@
'use strict';
// Settings configured here will be merged into the final config object.
export default {
}
+9
View File
@@ -0,0 +1,9 @@
'use strict';
import baseConfig from './base';
let config = {
appEnv: 'dev' // feel free to remove the appEnv property here
};
export default Object.freeze(Object.assign({}, baseConfig, config));
+9
View File
@@ -0,0 +1,9 @@
'use strict';
import baseConfig from './base';
let config = {
appEnv: 'dist' // feel free to remove the appEnv property here
};
export default Object.freeze(Object.assign({}, baseConfig, config));
+9
View File
@@ -0,0 +1,9 @@
'use strict';
import baseConfig from './base';
let config = {
appEnv: 'test' // don't remove the appEnv property here
};
export default Object.freeze(Object.assign(baseConfig, config));
+7
View File
@@ -0,0 +1,7 @@
import 'core-js/fn/object/assign';
import React from 'react';
import ReactDOM from 'react-dom';
import App from './components/Main';
// Render the main component into the dom
ReactDOM.render(<App />, document.getElementById('app'));
+7 -7
View File
@@ -11,13 +11,13 @@ import createComponent from 'helpers/shallowRenderHelper';
import Main from 'components/Main';
describe('MainComponent', () => {
let MainComponent;
let MainComponent;
beforeEach(() => {
MainComponent = createComponent(Main);
});
beforeEach(() => {
MainComponent = createComponent(Main);
});
it('should have its component name as default className', () => {
expect(MainComponent._store.props.className).to.equal('index');
});
it('should have its component name as default className', () => {
expect(MainComponent.props.className).to.equal('index');
});
});
+12
View File
@@ -0,0 +1,12 @@
/*eslint-env node, mocha */
/*global expect */
/*eslint no-console: 0*/
'use strict';
import config from 'config';
describe('appEnvConfigTests', () => {
it('should load app config file depending on current --env', () => {
expect(config.appEnv).to.equal('test');
});
});
+2 -2
View File
@@ -5,8 +5,8 @@
* @see http://simonsmith.io/unit-testing-react-components-without-a-dom/
* @author somonsmith
*/
import React from 'react/addons';
const TestUtils = React.addons.TestUtils;
import React from 'react';
import TestUtils from 'react-addons-test-utils';
/**
* Get the shallow rendered component
+7 -1
View File
@@ -1,2 +1,8 @@
var testsContext = require.context('.', true, /(Test\.js$)|(Helper\.js$)/);
'use strict';
require('babel-polyfill');
require('core-js/fn/object/assign');
// Add support for all files in the test directory
const testsContext = require.context('.', true, /(Test\.js$)|(Helper\.js$)/);
testsContext.keys().forEach(testsContext);
+10 -18
View File
@@ -1,10 +1,10 @@
'use strict';
var path = require('path');
var args = require('minimist')(process.argv.slice(2));
const path = require('path');
const args = require('minimist')(process.argv.slice(2));
// List of allowed environments
var allowedEnvs = ['dev', 'dist', 'test'];
const allowedEnvs = ['dev', 'dist', 'test'];
// Set the correct environment
var env;
@@ -15,33 +15,25 @@ if(args._.length > 0 && args._.indexOf('start') !== -1) {
} else {
env = 'dev';
}
process.env.REACT_WEBPACK_ENV = env;
// Get available configurations
var configs = {
const 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
* @param {String} env Environment to use
* @param {String} wantedEnv The wanted environment
* @return {Object} Webpack config
*/
function buildConfig(env) {
var usedEnv = getValidEnv(env);
return configs[usedEnv];
function buildConfig(wantedEnv) {
let isValid = wantedEnv && wantedEnv.length > 0 && allowedEnvs.indexOf(wantedEnv) !== -1;
let validEnv = isValid ? wantedEnv : 'dev';
return configs[validEnv];
}
module.exports = buildConfig(env);