From 5654426230355a727f0674e3edb391bc36e0c9e8 Mon Sep 17 00:00:00 2001 From: Jesper Wrang Date: Tue, 9 Jan 2018 02:15:49 +0100 Subject: [PATCH] Webpack and script for building --- package.json | 5 ++++- webpack.common.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++ webpack.dev.js | 9 ++++++++ webpack.prod.js | 13 +++++++++++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 webpack.common.js create mode 100644 webpack.dev.js create mode 100644 webpack.prod.js diff --git a/package.json b/package.json index 26794c5..403cc3b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "description": "View removed comments from reddit", "main": "src/index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "start": "webpack-dev-server --config webpack.dev.js", + "build": "webpack --config webpack.dev.js", + "build-prod": "webpack --config webpack.prod.js", + "gh-pages": "npm run build-prod && node publish.js" }, "repository": { "type": "git", diff --git a/webpack.common.js b/webpack.common.js new file mode 100644 index 0000000..e10372a --- /dev/null +++ b/webpack.common.js @@ -0,0 +1,57 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); + +module.exports = { + entry: [ + './src/js/index.js' + ], + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'bundle.js', + publicPath: '/' + }, + resolve: { + modules: [ + path.resolve('./src/js'), + path.resolve('./src'), + path.resolve('./node_modules') + ] + }, + module: { + loaders: [ + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + query: { + presets: ["@babel/preset-react"], + } + }, + { + test: /\.html$/, + loader: 'html-loader' + }, + ] + }, + plugins: [ + new CleanWebpackPlugin(['dist']), + new HtmlWebpackPlugin({ + template: 'src/index.html' + }), + new CopyWebpackPlugin([ + { + from: 'src/404.html', + to: '404.html' + }, + { + from: 'src/images', + to: 'images/' + } + ]), + ], + stats: { + colors: true + }, +} \ No newline at end of file diff --git a/webpack.dev.js b/webpack.dev.js new file mode 100644 index 0000000..593ca2c --- /dev/null +++ b/webpack.dev.js @@ -0,0 +1,9 @@ +const webpack = require('webpack'); +const merge = require('webpack-merge'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + devServer: { + historyApiFallback: true + }, +}); \ No newline at end of file diff --git a/webpack.prod.js b/webpack.prod.js new file mode 100644 index 0000000..66f7c26 --- /dev/null +++ b/webpack.prod.js @@ -0,0 +1,13 @@ +const webpack = require('webpack'); +const merge = require('webpack-merge'); +const common = require('./webpack.common.js'); +const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); + +module.exports = merge(common, { + plugins: [ + new UglifyJSPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production') + }) + ] +}); \ No newline at end of file