From c325d62b27f572543242868ddad8b2f40afb9030 Mon Sep 17 00:00:00 2001 From: webyak Date: Tue, 7 Jun 2016 17:58:41 +0700 Subject: [PATCH] Initial commit. --- .gitignore | 8 ++++ README.md | 61 ++++++++++++++++++++++++ client/assets/favicon.ico | Bin 0 -> 24838 bytes client/components/hello.js | 33 +++++++++++++ client/components/layout.js | 35 ++++++++++++++ client/components/not_found.js | 12 +++++ client/components/root.js | 16 +++++++ client/index.js | 41 +++++++++++++++++ client/routes.js | 15 ++++++ client/styling/colors.js | 5 ++ client/styling/common_styles.js | 10 ++++ config.json | 3 ++ package.json | 79 ++++++++++++++++++++++++++++++++ tools/build_static.js | 66 ++++++++++++++++++++++++++ tools/build_static_entry.js | 16 +++++++ tools/dev_server.js | 32 +++++++++++++ tools/isomorphic.prod.config.js | 15 ++++++ tools/lib/get_paths.js | 68 +++++++++++++++++++++++++++ tools/lib/render_document.js | 50 ++++++++++++++++++++ tools/lib/render_sitemap.js | 27 +++++++++++ tools/lib/write_file.js | 19 ++++++++ tools/webpack.dev.config.js | 50 ++++++++++++++++++++ tools/webpack.prod.config.js | 63 +++++++++++++++++++++++++ 23 files changed, 724 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 client/assets/favicon.ico create mode 100644 client/components/hello.js create mode 100644 client/components/layout.js create mode 100644 client/components/not_found.js create mode 100644 client/components/root.js create mode 100644 client/index.js create mode 100644 client/routes.js create mode 100644 client/styling/colors.js create mode 100644 client/styling/common_styles.js create mode 100644 config.json create mode 100644 package.json create mode 100644 tools/build_static.js create mode 100644 tools/build_static_entry.js create mode 100644 tools/dev_server.js create mode 100644 tools/isomorphic.prod.config.js create mode 100644 tools/lib/get_paths.js create mode 100644 tools/lib/render_document.js create mode 100644 tools/lib/render_sitemap.js create mode 100644 tools/lib/write_file.js create mode 100644 tools/webpack.dev.config.js create mode 100644 tools/webpack.prod.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..080b219 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +*.DS_Store +static/ +build/ +.tmp/ +nginx.conf +npm-debug.log +webpack-assets.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..77301b2 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# React Static Plate + +> Build static sites with React to host on [Amazon S3](https://aws.amazon.com/s3/), [Github Pages](https://pages.github.com/), [Surge](https://surge.sh/) et cetera
+> (React.js, React Router, Radium, Babel 6, Webpack) + +### Features + +    ✓ ES6+.
+    ✓ Hot Reloading.
+    ✓ ESLint rules based on Airbnb's Javascript Styleguide.
+    ✓ Every route is completely rendered into a `.html` page with `renderToString`.
+    ✓ Deferred script loading, so the browser can render the html without waiting for the js bundle first.
+    ✓ Hash is added to every asset's filename, so you can cache all assets forever.
+    ✓ Title, Meta and other SEO tags with [react-helmet](https://github.com/nfl/react-helmet).
+    ✓ SEO friendly, no JavaScript required to view a page.
+    ✓ Generates sitemap.xml
+ +### Getting Started + +Clone the repo, install Node modules and run the development server: + +``` +$ git clone -o react-static-plate -b master --single-branch \ + https://github.com/webyak/react-static-plate.git my-site +$ cd my-site +$ npm install +$ npm start +``` + +Then open [http://localhost:3000](http://localhost:3000) and have fun ;) + +### Deploy + +Set your `host` in `config.json` and generate all the static files with `npm run build`. Then upload the contents of the `build/` folder to your hosting solution of choice. Finish. + +You can also see the production site on your local machine using `http-server`: + +``` +$ npm install -g http-server +$ cd build +$ http-server +``` + +### Update + +You can fetch and merge recent changes from this repo into your own project: + +``` +$ git checkout master +$ git fetch react-static-plate +$ git merge react-static-plate/master +$ npm install +``` + +### FAQ + +**My site is not working properly on Amazon S3**:
+Make sure you define paths *with* trailing slashes, like ``. + +**My site is not working properly on Github Pages**:
+Make sure you define paths *without* trailing slashes, like ``. diff --git a/client/assets/favicon.ico b/client/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c125de5d897c1ff5692a656485b3216123dcd89 GIT binary patch literal 24838 zcmeI4X^>UL6@VY56)S&I{`6Nu0RscWCdj@GJHx(%?6_-;yKy1n;EEf9f}pr1CW5HA zYt$%U#C=}?jWH&%G@BaHBxsWAoUb3}&6%Ei@4Ii_JRa1`RQ23*yU)_wJ$?H0>6gj0 z${d_I^w5kvTW3xYEc?FvyP3>p$!py@`@T`|dVepIsjbbvR}af%KKy7YuQ%SDC^zmNWPYR^7avI5P-@dKev}UZ^aDAOyci9Nn zwR4qEz~tSvrp|#ACvWzo9`3B;`}^{t18dxaH;?xT7#hmJiKAaI;|O=$yxzXNOHGw~ z^!5pE^SW`av%t_$22LFPsM^l%=PSp!3r`>9w%s+^ZQYnnTQ*Ggd9-1~kj_o$YdW@b ztCkJ(ZGYjusqV5L4{^)R9Gt@gzU1t|?xhE&c^q(|(R#oa*}Sj5c({A$mhrB8*Y@tc zr)K#C{KOp-eHl35ZWJ1&zkmI>9DL%!KJE@_!=W?aH;i?ZDb0O1HPFy6 zcV0Kf)eZ0BHmz9vowF7EA{z*aue9M)iJP&Zd)qYlfJ-c^sS1qY^?>s)!!Ta@x zr@Lz|80r)7<{QVk9Z$}5SDaVtz*Rc?oH5~Wcjoc^eA&EdJ^h@aZ-BvL{K2s_7Cvfr zFL&(R?D&(9OxsS%z_BzI9^Ai^AOF$PUpGk~oO(=OpMc3@Zh&KH1a9>G%%0rC)t@oQ z4d~M`hX+g^Wf8P>A&&qjq|tZe*44Laq7qVPK#QIc)s*Qj34P`NL`Q{xBI`SnR!RC? zlGdTvC%oVZ@0BgcH>}qc!uzul@{i@sH}L0|=eZBJ9qF!HHaw?`s0(_DJj(v`(memI z6jH}=BfGlSlRV4)ouv#h*65yRR>G zo;I#~BVK&l&{+H=_~Nq$d%bFLh7GE5pS&>Fr{RMe>)MM19~z6F1oQo_y>vtlpEZF# zIc82TpMc3z9;{Q)=zG5B#4+96yHCvYy8p4;C%6x`%y$2HccC9|#vGVD)**C0xX|R| z%h)}ze!Tnrvvb@RZ!GX@2lMEq`=`08b`9$%FnN@*zJLo2wD5?MbE&LN)Z>Kty*;m= zt{Cn0>Q3nk)`bR^{dVf!3ECg6Yz4YcskI>$XH*L8E)MsudhnkP0B>+M(XEcErHUBKi~ z1`fEP&WPhp{@Ew?cPlR(ma9iw8NbJWHqp=btCtM*FnP*@ZwwlJ&-Y|LEjgvJzUtPc zz5CrWNBRV8d0-bpWAl<=zM1PU8lJseDxBK^QuuCj2fg{&2#*IG5ezf1B(o%lU+OZx7So4D?yi2*h zFBkr5pG3AJs83uy!~C3mQZLp~ss7-N9oAY>t)!eC#s)CrPukK!(!G*)H?v(~JCoj# zfvgTxMV{4?zL1neQ;ITVBAdFDf`1yG$o{g7^1sR_n{RZ7tnXio?tM%240}(z9xFY0 zlz{^-G*RET;-`7`>e0b{{`!2kM)t7Si9ZqD$~wh*hyGC>z~qs@0T&u*;h}hiKGEga zHkJ;%7aNc^o_0(>Z{Gp069H;TwPTUnvvX0SJ+kGGZ0lFBWocl>kaa)AoiMta+x_-J-?#KHFnJ*! zwD1V?)4s#|?O)DlMBhVv4IgZs?d>b<6%xK3<{o91H?-%8?PK!_fm#3d>{{gQ z?*8`b{G6?bZKdO{_9IVlz{R$PcGjeL|3*|@upby()_Lf^eQ&XQe)CjsbJ3Uolrgt< zweld3GH|fZpn(=1@PencO_a_)v6tU?WV-w8wfXLbOGae0{<*C?Ead$6v+> z|EQKThJTmwXK!c6AOD+FgtDv7i<48{-OPce!KDVkzR+XKOcREPha(;$}iUb!*)f-Fb}Y4@r9z-_{OIg z`xn^T#ZtEPv_T$M*Sr+=Z{q#~8$|7Y{0!*2u${D*Jj%dfOrS~FzpH*_|55J!7kl4w z?LT!7T(!3!632pmZh?dh`n-z$_ts42pn6;c`}hx;TSYd0idsqal5&0uGV=UM{c9xQ z1KK6&TS+a^H|6B_hPo1W3 zh+Dun!`UkP%H3}*@IE18q{7&MH2f3?T6o}Jf+xI@fh=SyUOArw`*w1_-PUlHZTHc@ z--yqIxPtI}IjPRzLIZ8cPv4P=>?A&=E~~0)>&J#V;TwAR*6}`01iu~U$@prtzW6YS ze}E>gUX+0YuF}B+Uhw2x7a7Q+oOzMNFHTNN<)40Rzg#`pABKF18@l}5A>RL`?Ri;Z zC8ExD$)im1@R{N7(wIog8$Yn(6%q$yd9(zKe};OnH%;mWBs7)>ls~T3Wi6!Xqw6+dpJLVS1P| z9qV%io-nE*rYcPxiS31>U_>mbPTXxkC*!?*zefr#2vF|qr8{|4|u^7-pD|f z&OPc->UKu)=iHgIpysp;Lsbyj}GJWoBkufOA={CRTUjr%af zc5pUH9{pg?M5%+)oN`q9yBbBt@+3xHV)qGm8b)Cp-w7~CwEhtBUk0rbjrqM zTb|tQ3-5-pw^cul`T+X&s?O;?V(FD!(Q9Qg@(LTCNz{0-vBM^SX5lti3|GpxFn4;Ax6pGc~t)R!Bo${lYH(* z!F&5X*?S&}YoDCyzwv1H+XI(+rL`;RN9}iLxlfr-r&vGG8OQa@=>+a)+Ij)sd_{wu z1Am(+3-RFr4&N8N6+hqo19S#;SA1-hG>07p3}&*j4CR+rqdV)^6n; z_vFr!(a%-=#=kb{pYmNL@6|DWkw~%E2V2jYl*e1}c{e$fib?(O+hs}eoBLRo&9(;J}YV}0Mi;LZAe{U$(s= zT<-IaV$Z+q-P!~3{HxN>Kbw30jXzM&I(S<6Ksx^}HvU2Vntb!etSsm0>)j}Me^+L5{2yz--)?W`Q?az z!WLG4UNP}+#C+NKH+ZG-Q=E>IPp%LuKLx$$8NAOGr(#~P>!EA zDYlpXDR=xM?Xv5(-qp74Cw3LzBeASHSBY`OezkbOyjP!G%WSymju_C$VBl--z ( +
+

Hi, React.

+
+); + +export default Radium(Hello); diff --git a/client/components/layout.js b/client/components/layout.js new file mode 100644 index 0000000..90e43f1 --- /dev/null +++ b/client/components/layout.js @@ -0,0 +1,35 @@ +// ================================================== +// Layout +// ================================================== + +import React from 'react'; +import Radium, { StyleRoot, Style } from 'radium'; +import Helmet from 'react-helmet'; + +const Layout = ({ children }) => ( + + +