mirror of
https://github.com/icewind1991/mapboundaries.git
synced 2026-06-03 10:54:07 +02:00
boilerplate
This commit is contained in:
commit
abfdb9d2d9
9 changed files with 224 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
.idea
|
||||||
|
node_modules
|
||||||
|
build
|
||||||
21
Makefile
Normal file
21
Makefile
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
all: build
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -rf dist
|
||||||
|
rm -rf node_modules
|
||||||
|
|
||||||
|
node_modules: package.json
|
||||||
|
npm install
|
||||||
|
|
||||||
|
sources=$(wildcard js/*) $(wildcard js/*/*) $(wildcard css/*/*) $(wildcard css/*)
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: node_modules $(sources)
|
||||||
|
node node_modules/.bin/webpack --colors --display-error-details --config webpack.prod.config.js
|
||||||
|
|
||||||
|
build/js/main.js: build
|
||||||
|
|
||||||
|
.PHONY: watch
|
||||||
|
watch: node_modules
|
||||||
|
node node_modules/.bin/webpack-dev-server --hot --inline --config webpack.dev.config.js
|
||||||
17
package.json
Normal file
17
package.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/react": "^15.0.21",
|
||||||
|
"@types/react-dom": "^0.14.23",
|
||||||
|
"clean-webpack-plugin": "^0.1.16",
|
||||||
|
"extract-text-webpack-plugin": "^2.1.0",
|
||||||
|
"html-webpack-plugin": "^2.28.0",
|
||||||
|
"postcss-cssnext": "^2.10.0",
|
||||||
|
"postcss-loader": "^1.3.3",
|
||||||
|
"postcss-nested": "^1.0.1",
|
||||||
|
"react-hot-loader": "^3.0.0-beta.6",
|
||||||
|
"ts-loader": "^2.0.3",
|
||||||
|
"typescript": "^2.2.2",
|
||||||
|
"webpack": "^2.4.1",
|
||||||
|
"webpack-dev-server": "^2.4.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
postcss.config.js
Normal file
6
postcss.config.js
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
require("postcss-cssnext")(),
|
||||||
|
require('postcss-nested')
|
||||||
|
]
|
||||||
|
};
|
||||||
11
src/App.tsx
Normal file
11
src/App.tsx
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export interface AppState {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export class App extends React.Component<{}, AppState> {
|
||||||
|
render() {
|
||||||
|
return <div>app</div>;
|
||||||
|
}
|
||||||
|
}
|
||||||
32
src/index.tsx
Normal file
32
src/index.tsx
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import * as React from 'react';
|
||||||
|
import {render} from 'react-dom';
|
||||||
|
import {App} from './App';
|
||||||
|
import {AppContainer} from 'react-hot-loader';
|
||||||
|
|
||||||
|
declare function require(path: string): any;
|
||||||
|
declare const module: {
|
||||||
|
hot: {
|
||||||
|
accept: (path: string, cb: Function) => null
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const root = document.createElement('div');
|
||||||
|
document.body.appendChild(root);
|
||||||
|
|
||||||
|
render((
|
||||||
|
<App/>
|
||||||
|
), root);
|
||||||
|
|
||||||
|
if (module.hot) {
|
||||||
|
module.hot.accept('./App', () => {
|
||||||
|
const RootContainer = require('./App').App;
|
||||||
|
render(
|
||||||
|
<AppContainer>
|
||||||
|
<RootContainer />
|
||||||
|
</AppContainer>,
|
||||||
|
root
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
17
tsconfig.json
Normal file
17
tsconfig.json
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"es2015.promise",
|
||||||
|
"es6"
|
||||||
|
],
|
||||||
|
"module": "ES6",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"target": "ES5",
|
||||||
|
"declaration": true,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"jsx": "react"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
54
webpack.dev.config.js
Normal file
54
webpack.dev.config.js
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const webpack = require("webpack");
|
||||||
|
const path = require("path");
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
devtool: 'source-map',
|
||||||
|
entry: {
|
||||||
|
app: [
|
||||||
|
// 'webpack-dev-server/client?http://localhost:3000',
|
||||||
|
// 'webpack/hot/only-dev-server',
|
||||||
|
'react-hot-loader/patch',
|
||||||
|
'./src/index.tsx'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: path.join(__dirname, "build"),
|
||||||
|
filename: "[name]-[hash].js",
|
||||||
|
publicPath: '/'
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.js', '.jsx', '.tsx', '.ts'],
|
||||||
|
// alias: {
|
||||||
|
// 'react': 'preact-compat',
|
||||||
|
// 'react-dom': 'preact-compat'
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
title: 'demos.tf',
|
||||||
|
chunks: ['app']
|
||||||
|
}),
|
||||||
|
new webpack.NamedModulesPlugin()
|
||||||
|
],
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{test: /\.tsx?$/, use: ['react-hot-loader/webpack', 'ts-loader']},
|
||||||
|
{
|
||||||
|
test: /.*\.(gif|png|jpe?g|svg|webp)(\?.+)?$/i,
|
||||||
|
use: [
|
||||||
|
'url-loader?limit=5000&hash=sha512&digest=hex&name=[hash].[ext]'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ['style-loader', 'css-loader', 'postcss-loader']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
devServer: {
|
||||||
|
contentBase: path.resolve(__dirname, './src')
|
||||||
|
},
|
||||||
|
};
|
||||||
63
webpack.prod.config.js
Normal file
63
webpack.prod.config.js
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const webpack = require("webpack");
|
||||||
|
const path = require("path");
|
||||||
|
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
||||||
|
const CleanPlugin = require('clean-webpack-plugin');
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
devtool: 'source-map',
|
||||||
|
entry: {
|
||||||
|
app: [
|
||||||
|
'./src/index.tsx'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: path.join(__dirname, "build"),
|
||||||
|
filename: "[name]-[hash].js",
|
||||||
|
libraryTarget: 'umd',
|
||||||
|
publicPath: '/'
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.js', '.jsx', '.tsx', '.ts']
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new CleanPlugin(['build']),
|
||||||
|
new ExtractTextPlugin({
|
||||||
|
filename: '[contenthash].css',
|
||||||
|
allChunks: true
|
||||||
|
}),
|
||||||
|
new webpack.NoEmitOnErrorsPlugin(),
|
||||||
|
new webpack.optimize.OccurrenceOrderPlugin(),
|
||||||
|
new webpack.optimize.UglifyJsPlugin(),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env': {
|
||||||
|
// Useful to reduce the size of client-side libraries, e.g. react
|
||||||
|
NODE_ENV: JSON.stringify('production')
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
title: 'mapboundaries demos.tf',
|
||||||
|
chunks: ['app']
|
||||||
|
})
|
||||||
|
],
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{test: /\.tsx?$/, use: 'ts-loader'},
|
||||||
|
{
|
||||||
|
test: /.*\.(gif|png|jpe?g|svg|webp)(\?.+)?$/i,
|
||||||
|
use: [
|
||||||
|
'url-loader?limit=5000&hash=sha512&digest=hex&name=[hash].[ext]'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ExtractTextPlugin.extract({
|
||||||
|
fallback: "style-loader",
|
||||||
|
use: ['css-loader', 'postcss-loader']
|
||||||
|
})
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue