Skip to content

Commit a0657a0

Browse files
committed
Adds base react web example.
2 parents 8713349 + cb6c1ab commit a0657a0

File tree

12 files changed

+622
-107
lines changed

12 files changed

+622
-107
lines changed

.eslintrc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"root": true,
33
"parser": "babel-eslint",
4-
"extends": "airbnb-base",
4+
"extends": "airbnb",
55
"plugins": [
66
"flowtype"
77
],
@@ -14,5 +14,7 @@
1414
"ecmaFeatures": {
1515
"defaultParams": true
1616
},
17-
"rules": {}
17+
"rules": {
18+
"react/jsx-filename-extension": 0
19+
}
1820
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ coverage
1414
# Build output
1515
umd
1616
commonjs
17+
build
1718

1819
# Flow
1920
flow-coverage

examples/.eslintrc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"rules": {
3+
"no-console": 0
4+
}
5+
}

examples/web/.babelrc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"presets": [
3+
"latest",
4+
"stage-3",
5+
"react"
6+
]
7+
}

examples/web/package.json

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
{
22
"name": "my-library-example",
33
"version": "1.0.0",
4-
"description": "",
4+
"description": "An example of my-library",
55
"main": "index.js",
6+
"engines": {
7+
"node": ">=7.0.0"
8+
},
69
"scripts": {
7-
"test": "echo \"Error: no test specified\" && exit 1"
10+
"start": "babel-node server.js"
811
},
912
"author": "",
1013
"license": "MIT",
11-
"devDependencies": {
12-
"babel-core": "6.21.0",
13-
"babel-loader": "6.2.10",
14-
"babel-preset-latest": "6.16.0",
15-
"babel-preset-stage-3": "6.17.0",
16-
"express": "4.14.0",
17-
"webpack": "2.2.0-rc.3",
18-
"webpack-dev-middleware": "1.9.0",
19-
"webpack-hot-middleware": "2.14.0"
14+
"devDependencies": {},
15+
"dependencies": {
16+
"app-root-dir": "^1.0.2",
17+
"babel-cli": "^6.18.0",
18+
"babel-core": "^6.21.0",
19+
"babel-loader": "^6.2.10",
20+
"babel-preset-latest": "^6.16.0",
21+
"babel-preset-react": "^6.16.0",
22+
"babel-preset-stage-3": "^6.17.0",
23+
"babel-register": "^6.18.0",
24+
"express": "^4.14.0",
25+
"html-webpack-plugin": "^2.25.0",
26+
"react": "^15.4.1",
27+
"react-dom": "^15.4.1",
28+
"webpack": "^2.2.0-rc.3",
29+
"webpack-dev-middleware": "^1.9.0",
30+
"webpack-hot-middleware": "^2.14.0"
2031
}
2132
}

examples/web/server.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import express from 'express';
2+
import webpack from 'webpack';
3+
import devMiddleware from 'webpack-dev-middleware';
4+
import hotMiddleware from 'webpack-hot-middleware';
5+
import config from './tools/webpack/config';
6+
7+
const port = process.env.PORT || 1337;
8+
const app = express();
9+
const compiler = webpack(config);
10+
app.use(
11+
devMiddleware(compiler, {
12+
quiet: true,
13+
noInfo: true,
14+
headers: {
15+
'Access-Control-Allow-Origin': '*',
16+
},
17+
// Ensure that the public path is taken from the compiler webpack config
18+
// as it will have been created as an absolute path to avoid conflicts
19+
// with an node servers.
20+
publicPath: compiler.options.output.publicPath,
21+
}),
22+
);
23+
app.use(hotMiddleware(compiler));
24+
25+
app.listen(port, () => console.log(`Example running on port ${port}...`));

examples/web/src/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import React from 'react';
2+
import { render } from 'react-dom';
3+
4+
function App() {
5+
return <div>poop</div>;
6+
}
7+
8+
render(<App />, document.getElementById('app'));

examples/web/tools/webpack/config.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { resolve as resolvePath } from 'path';
2+
import webpack from 'webpack';
3+
import HtmlWebpackPlugin from 'html-webpack-plugin';
4+
import appRootDir from 'app-root-dir';
5+
import pkg from '../../package.json';
6+
7+
module.exports = {
8+
entry: {
9+
index: resolvePath(appRootDir.get(), './src/index.js'),
10+
},
11+
output: {
12+
path: resolvePath(appRootDir.get(), './build'),
13+
filename: `${pkg.name}.js`,
14+
publicPath: '/',
15+
},
16+
target: 'web',
17+
plugins: [
18+
new webpack.NoErrorsPlugin(),
19+
new HtmlWebpackPlugin({
20+
filename: 'index.html',
21+
template: resolvePath(__dirname, './html.js'),
22+
inject: true,
23+
// We can pass custom data to the template...
24+
custom: {
25+
name: pkg.name,
26+
description: pkg.description,
27+
},
28+
}),
29+
],
30+
module: {
31+
rules: [
32+
{
33+
test: /\.js$/,
34+
loader: 'babel-loader',
35+
include: [
36+
resolvePath(appRootDir.get(), './src'),
37+
],
38+
},
39+
],
40+
},
41+
};

examples/web/tools/webpack/html.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = function html(templateParams) {
2+
const { name, description } = templateParams.htmlWebpackPlugin.options.custom;
3+
return `
4+
<!DOCTYPE html>
5+
<html lang="en">
6+
<head>
7+
<meta charset="utf-8">
8+
<meta name="description" content="${description}"/>
9+
<meta name="charset" content="utf-8"/>
10+
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
11+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
12+
<title>${name} example</title>
13+
</head>
14+
<body>
15+
<div id='app'></div>
16+
</body>
17+
</html>`;
18+
};

0 commit comments

Comments
 (0)