From bfcf4971f61943b52d30dad698f090ea09001589 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Tue, 30 Aug 2016 10:02:00 +0300 Subject: [PATCH] Implement cli mode --- package.json | 2 +- src/emails/register/Register.jsx | 7 ++++++ src/emails/register/index.js | 3 +++ src/index.js | 30 +++++++++++++++++++--- webpack.config.js | 43 +++++++++++++------------------- 5 files changed, 54 insertions(+), 31 deletions(-) create mode 100644 src/emails/register/Register.jsx create mode 100644 src/emails/register/index.js diff --git a/package.json b/package.json index 77de66b..755dc0e 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "test": "karma start ./karma.conf.js", "lint": "eslint ./src", "i18n": "cd ./scripts && ./node_modules/.bin/babel-node i18n-collect.js", - "build": "rm -rf dist/ && webpack --progress --colors -p", + "build": "rm -rf dist/ && NODE_ENV=production webpack --progress --colors", "render": "" }, "dependencies": { diff --git a/src/emails/register/Register.jsx b/src/emails/register/Register.jsx new file mode 100644 index 0000000..b8b4e54 --- /dev/null +++ b/src/emails/register/Register.jsx @@ -0,0 +1,7 @@ +export default function Register({username}) { + return ( +
+ You Have Been Registered, {username}! +
+ ); +} diff --git a/src/emails/register/index.js b/src/emails/register/index.js new file mode 100644 index 0000000..2c2e2af --- /dev/null +++ b/src/emails/register/index.js @@ -0,0 +1,3 @@ +import Register from './Register'; + +export default Register; diff --git a/src/index.js b/src/index.js index 22c732b..4fe5ecc 100644 --- a/src/index.js +++ b/src/index.js @@ -2,12 +2,34 @@ import 'babel-polyfill'; import React from 'react'; import ReactDOM from 'react-dom'; +import ReactDOMServer from 'react-dom/server'; import { IntlProvider } from 'react-intl'; -ReactDOM.render( +import Register from 'emails/register'; + +const isCli = typeof window === 'undefined'; + +const App = ({type, payload = {}}) => ( -
Hello world
-
, - document.getElementById('app') + {isCli + ? ( + + ) : ( +
+ Hello world + +
+ ) + } + ); + +if (isCli) { + module.exports = { + default: (props) => + ReactDOMServer.renderToStaticMarkup() + }; +} else { + ReactDOM.render(, document.getElementById('app')); +} diff --git a/webpack.config.js b/webpack.config.js index 49dc020..4588843 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,19 +1,17 @@ /* eslint-env node */ -var path = require('path'); +const path = require('path'); -var webpack = require('webpack'); -var loaderUtils = require('loader-utils'); -var ExtractTextPlugin = require('extract-text-webpack-plugin'); -var HtmlWebpackPlugin = require('html-webpack-plugin'); -var cssUrl = require('webpack-utils/cssUrl'); -var cssImport = require('postcss-import'); - -var vendor = Object.keys(require('./package.json').dependencies); +const webpack = require('webpack'); +const loaderUtils = require('loader-utils'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const cssUrl = require('webpack-utils/cssUrl'); +const cssImport = require('postcss-import'); const rootPath = path.resolve('./src'); -const isProduction = process.argv.some((arg) => arg === '-p'); +const isProduction = process.env.NODE_ENV === 'production'; process.env.NODE_ENV = isProduction ? 'production' : 'development'; @@ -48,14 +46,16 @@ const cssLoaderQuery = { var webpackConfig = { entry: { - app: path.join(__dirname, 'src'), - vendor: vendor + app: path.join(__dirname, 'src') }, + target: isProduction ? 'node' : 'web', + output: { path: path.join(__dirname, 'dist'), publicPath: '/', - filename: '[name].js?[hash]' + filename: isProduction ? '[name].js' : '[name].js?[hash]', + libraryTarget: isProduction ? 'commonjs' : undefined }, resolve: { @@ -92,22 +92,13 @@ var webpackConfig = { new HtmlWebpackPlugin({ template: 'src/index.ejs', favicon: 'src/favicon.ico', - hash: isProduction, filename: 'index.html', - inject: false, - minify: { - collapseWhitespace: isProduction - } + inject: false }), new webpack.ProvidePlugin({ - // window.fetch polyfill - fetch: 'imports?this=>self!exports?self.fetch!whatwg-fetch' - }), - new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js?[hash]') - ].concat(isProduction ? [ - new webpack.optimize.DedupePlugin(), - new webpack.optimize.UglifyJsPlugin() - ] : []), + React: 'react' + }) + ], module: { loaders: [