React build as of https://medium.com/@philoskepsi/how-to-build-a-react-app-with-webpack-4-and-babel-7-e69314efc5db
This commit is contained in:
parent
2976a9fd31
commit
6387c2c73f
8 changed files with 6887 additions and 0 deletions
3
reactapp/.babelrc
Normal file
3
reactapp/.babelrc
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"presets": ["@babel/preset-env", "@babel/preset-react"]
|
||||
}
|
37
reactapp/package.json
Normal file
37
reactapp/package.json
Normal file
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"name": "react-test",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"repository": "ssh://git@code.yavook.de:22022/jmm/reacttest.git",
|
||||
"author": "Jörn-Michael Miehe",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.3.4",
|
||||
"@babel/polyfill": "^7.2.5",
|
||||
"@babel/preset-env": "^7.3.4",
|
||||
"@babel/preset-react": "^7.0.0",
|
||||
"babel-loader": "^8.0.5",
|
||||
"copy-webpack-plugin": "^5.0.0",
|
||||
"css-loader": "^2.1.0",
|
||||
"file-loader": "^3.0.1",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"import-glob-loader": "^1.1.0",
|
||||
"mini-css-extract-plugin": "^0.5.0",
|
||||
"node-sass": "^4.11.0",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.1",
|
||||
"sass-loader": "^7.1.0",
|
||||
"url-loader": "^1.1.2",
|
||||
"webpack": "^4.29.6",
|
||||
"webpack-cli": "^3.2.3",
|
||||
"webpack-dev-server": "^3.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "NODE_ENV=development webpack-dev-server --host 0.0.0.0 --mode development --progress",
|
||||
"build": "NODE_ENV=production webpack --mode production"
|
||||
},
|
||||
"dependencies": {
|
||||
"react": "^16.8.3",
|
||||
"react-dom": "^16.8.3"
|
||||
}
|
||||
}
|
BIN
reactapp/src/assets/breathe.png
Normal file
BIN
reactapp/src/assets/breathe.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 230 KiB |
20
reactapp/src/index.ejs
Normal file
20
reactapp/src/index.ejs
Normal file
|
@ -0,0 +1,20 @@
|
|||
<% const vars = htmlWebpackPlugin.options.vars %>
|
||||
<% const isDev = process.env.NODE_ENV === "development" %>
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/ >
|
||||
<title>My React App</title>
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css" rel="stylesheet" />
|
||||
|
||||
<% if (!isDev) { %>
|
||||
<link type="text/css" rel="stylesheet" href="./styles.css" />
|
||||
<% } %>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
</html>
|
17
reactapp/src/index.js
Normal file
17
reactapp/src/index.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
import "./styles/styles.scss"
|
||||
|
||||
import React, { Component } from "react"
|
||||
import ReactDOM from "react-dom"
|
||||
|
||||
class MyApp extends Component {
|
||||
render() {
|
||||
return (
|
||||
<div className="my-react-app">
|
||||
<h1>My app is running!</h1>
|
||||
<img src="./assets/breathe.png" />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
ReactDOM.render(<MyApp />, document.querySelector("#app"))
|
5
reactapp/src/styles/styles.scss
Normal file
5
reactapp/src/styles/styles.scss
Normal file
|
@ -0,0 +1,5 @@
|
|||
body {
|
||||
background: black;
|
||||
color: white;
|
||||
text-align: center;
|
||||
}
|
52
reactapp/webpack.config.js
Normal file
52
reactapp/webpack.config.js
Normal file
|
@ -0,0 +1,52 @@
|
|||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
||||
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
|
||||
const config = {
|
||||
entry: "./src/index.js",
|
||||
output: { filename: "./bundle.js" },
|
||||
resolve: { extensions: ['.js', '.jsx'] },
|
||||
devServer: { historyApiFallback: true },
|
||||
plugins: [
|
||||
new CopyWebpackPlugin([{ from: "./src/assets", to: "assets" }]),
|
||||
new MiniCssExtractPlugin({ filename: "styles.css" }),
|
||||
new HtmlWebpackPlugin({
|
||||
template: "./src/index.ejs",
|
||||
filename: "./index.html",
|
||||
vars: {}
|
||||
})
|
||||
],
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.jsx?$/,
|
||||
exclude: /node_modules/,
|
||||
use: { loader: "babel-loader" }
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)$/i,
|
||||
use: { loader: "url-loader", options: {limit: 10000} }
|
||||
},
|
||||
{
|
||||
test: /\.scss$/,
|
||||
use: [
|
||||
{ loader: MiniCssExtractPlugin.loader },
|
||||
{ loader: "css-loader", options: {sourceMap: true} },
|
||||
{ loader: "sass-loader", },
|
||||
{ loader: "import-glob-loader" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
config.devtool = "source-map"
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
config.plugins.push(new OptimizeCssAssetsPlugin())
|
||||
}
|
||||
|
||||
module.exports = config
|
6753
reactapp/yarn.lock
Normal file
6753
reactapp/yarn.lock
Normal file
File diff suppressed because it is too large
Load diff
Reference in a new issue