Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.76 KB | None | 0 0
  1. var path = require('path');
  2. var webpack = require('webpack');
  3.  
  4. var config = {
  5. devtool: 'cheap-module-eval-source-map',
  6. entry: [
  7. 'es5-shim/es5-shim',
  8. 'es5-shim/es5-sham',
  9. 'webpack-dev-server/client?http://localhost:8080',
  10. 'webpack/hot/only-dev-server',
  11. 'webpack-dev-middleware/client',
  12. './app/main'
  13. ],
  14. output: {
  15. path: path.join(__dirname, 'public', 'js'),
  16. filename: 'bundle.js',
  17. publicPath: './public/'
  18. },
  19. resolve: {
  20. extensions: ['', '.js', '.jsx'],
  21. alias: {
  22. react: path.resolve('./node_modules/react'),
  23. 'react-dom': path.resolve('./node_modules/react-dom'),
  24. },
  25. },
  26. plugins: [
  27. new webpack.HotModuleReplacementPlugin(),
  28. new webpack.NoErrorsPlugin(),
  29. new webpack.optimize.OccurrenceOrderPlugin(),
  30. new webpack.DefinePlugin({
  31. 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
  32. }),
  33. ],
  34. module: {
  35. loaders: [
  36. {
  37. test: /.css$/,
  38. loader: 'style!css'
  39. },
  40. {
  41. test: require.resolve('react'),
  42. loader: 'imports?shim=es5-shim/es5-shim&sham=es5-shim/es5-sham',
  43. },
  44. {
  45. test: /.jsx$/,
  46. exclude: /node_modules/,
  47. loaders: ['react-hot', 'babel-loader'],
  48. include: path.join(__dirname, 'app'),
  49. query: {
  50. presets: ['es2015', 'react']
  51. }
  52. }
  53. ]
  54. }
  55. };
  56.  
  57. if (process.env.NODE_ENV === 'production') {
  58. config.plugins.push(
  59. new webpack.optimize.UglifyJsPlugin({
  60. compressor: {
  61. screw_ie8: true,
  62. warnings: false
  63. }
  64. })
  65. );
  66. }
  67.  
  68. module.exports = config;
  69.  
  70. var express = require('express');
  71. var path = require('path');
  72. var dotenv = require('dotenv');
  73. var React = require('react');
  74. var ReactDOM = require('react-dom/server');
  75. var Router = require('react-router');
  76. var Provider = require('react-redux').Provider;
  77. var webpack = require('webpack');
  78. var WebpackDevServer = require('webpack-dev-server');
  79. var config = require('./webpack.config');
  80.  
  81. // Load environment variables from .env file
  82. dotenv.load();
  83.  
  84. // ES6 Transpiler
  85. require('babel-core/register');
  86. require('babel-polyfill');
  87.  
  88. // React and Server-Side Rendering
  89. var routes = require('./app/routes');
  90. var configureStore = require('./app/store/configureStore').default;
  91.  
  92. var app = express();
  93.  
  94. var compiler = webpack(config);
  95.  
  96. var hbs = exphbs.create({
  97. defaultLayout: 'main',
  98. helpers: {
  99. ifeq: function(a, b, options) {
  100. if (a === b) {
  101. return options.fn(this);
  102. }
  103. return options.inverse(this);
  104. },
  105. toJSON : function(object) {
  106. return JSON.stringify(object);
  107. }
  108. }
  109. });
  110.  
  111. app.engine('handlebars', hbs.engine);
  112. app.set('view engine', 'handlebars');
  113. app.set('port', process.env.PORT || 3000);
  114. app.use(compression());
  115. app.use(sass({ src: path.join(__dirname, 'public'), dest: path.join(__dirname, 'public') }));
  116. app.use(logger('dev'));
  117. app.use(bodyParser.json());
  118. app.use(bodyParser.urlencoded({ extended: false }));
  119. app.use(expressValidator());
  120. app.use(cookieParser());
  121. app.use(express.static(path.join(__dirname, 'public')));
  122.  
  123. if (app.get('env') === 'development') {
  124. app.use(require('webpack-dev-middleware')(compiler, {
  125. noInfo: true,
  126. publicPath: config.output.publicPath
  127. }));
  128. app.use(require('webpack-hot-middleware')(compiler));
  129. }
  130.  
  131. new WebpackDevServer(webpack(config), {
  132. publicPath: config.output.publicPath,
  133. hot: true,
  134. historyApiFallback: true,
  135. }).listen(8080, 'localhost', function ( err, result ) {
  136. if (err) {
  137. return console.log(err);
  138. }
  139.  
  140. console.log('listening at http://localhost:8080');
  141. })
  142.  
  143.  
  144. // React server rendering
  145. app.use(function(req, res) {
  146. var initialState = {
  147. messages: {}
  148. };
  149.  
  150. var store = configureStore(initialState);
  151.  
  152. Router.match({ routes: routes.default(store), location: req.url }, function(err, redirectLocation, renderProps) {
  153. if (err) {
  154. res.status(500).send(err.message);
  155. } else if (redirectLocation) {
  156. res.status(302).redirect(redirectLocation.pathname + redirectLocation.search);
  157. } else if (renderProps) {
  158. var html = ReactDOM.renderToString(React.createElement(Provider, { store: store },
  159. React.createElement(Router.RouterContext, renderProps)
  160. ));
  161. res.render('layouts/main', {
  162. html: html,
  163. initialState: store.getState()
  164. });
  165. } else {
  166. res.sendStatus(404);
  167. }
  168. });
  169. });
  170.  
  171. // Production error handler
  172. if (app.get('env') === 'production') {
  173. app.use(function(err, req, res, next) {
  174. console.error(err.stack);
  175. res.sendStatus(err.status || 500);
  176. });
  177. }
  178.  
  179. app.listen(app.get('port'), function() {
  180. console.log('Express server listening on port ' + app.get('port'));
  181. });
  182.  
  183. module.exports = app;
  184.  
  185. {
  186. "name": "noisy-violet",
  187. "version": "1.0.0",
  188. "description": "My app description",
  189. "scripts": {
  190. "build": "webpack --display-error-details",
  191. "deploy": "npm test && git push heroku master",
  192. "postinstall": "npm run build",
  193. "start": "node server.js",
  194. "test": "npm run test:client && npm run test:server",
  195. "test:client": "mocha test/client --recursive --compilers js:babel-register",
  196. "test:server": "mocha test/server --recursive --compilers js:babel-register"
  197. },
  198. "dependencies": {
  199. "babel": "^6.5.2",
  200. "babel-core": "^6.7.2",
  201. "babel-loader": "^6.2.4",
  202. "babel-plugin-react-transform": "^2.0.2",
  203. "babel-polyfill": "^6.7.2",
  204. "babel-preset-es2015": "^6.6.0",
  205. "babel-preset-react": "^6.16.0",
  206. "babel-preset-stage-0": "^6.16.0",
  207. "body-parser": "^1.15.1",
  208. "compression": "^1.6.2",
  209. "cookie-parser": "^1.4.1",
  210. "dotenv": "^2.0.0",
  211. "es5-shim": "^4.5.9",
  212. "express": "^4.13.4",
  213. "express-handlebars": "^3.0.0",
  214. "express-validator": "^2.20.4",
  215. "imports-loader": "^0.7.0",
  216. "jquery": "^3.1.1",
  217. "morgan": "^1.7.0",
  218. "node-sass-middleware": "^0.9.7",
  219. "nodemailer": "^2.3.0",
  220. "react": "^15.4.1",
  221. "react-dom": "^15.4.1",
  222. "react-redux": "4.4.1",
  223. "react-router": "^2.4.0",
  224. "react-sizeme": "^2.2.0",
  225. "react-three-renderer": "^3.0.2",
  226. "react-transform-catch-errors": "^1.0.2",
  227. "react-transform-hmr": "^1.0.4",
  228. "redbox-react": "^1.2.4",
  229. "redux": "^3.3.1",
  230. "redux-logger": "^2.6.1",
  231. "redux-promise": "^0.5.3",
  232. "redux-thunk": "^2.0.1",
  233. "three": "^0.82.1",
  234. "webpack": "^2.2.0",
  235. "webpack-dev-middleware": "^1.6.1",
  236. "webpack-hot-middleware": "^2.10.0",
  237. "whatwg-fetch": "^0.11.0"
  238. },
  239. "devDependencies": {
  240. "babel-plugin-rewire": "1.0.0-rc-3",
  241. "babel-register": "^6.8.0",
  242. "chai": "^3.5.0",
  243. "enzyme": "^2.3.0",
  244. "fetch-mock": "3.0.2",
  245. "mocha": "^2.4.5",
  246. "react-addons-perf": "^15.4.2",
  247. "react-addons-test-utils": "^15.0.2",
  248. "react-hot-loader": "^1.3.1",
  249. "redux-mock-store": "^1.0.2",
  250. "sinon": "^1.17.3",
  251. "sinon-chai": "^2.8.0",
  252. "supertest": "^1.2.0",
  253. "webpack-dev-server": "^1.16.2"
  254. },
  255. "engines": {
  256. "node": "6.1.0"
  257. }
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement