| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*
- Copyright (C) 2017 Cloudbase Solutions SRL
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- const path = require('path')
- const HtmlWebpackPlugin = require('html-webpack-plugin')
- const splitVendor = require('webpack-blocks-split-vendor')
- const happypack = require('webpack-blocks-happypack')
- const ProgressPlugin = require('webpack/lib/ProgressPlugin')
- const {
- addPlugins, createConfig, entryPoint, env, setOutput,
- sourceMaps, defineConstants, webpack,
- } = require('@webpack-blocks/webpack2')
- const sourceDir = 'src'
- const publicPath = `/${process.env.PUBLIC_PATH || ''}/`.replace('//', '/')
- const sourcePath = path.join(process.cwd(), sourceDir)
- const outputPath = path.join(process.cwd(), 'dist')
- process.noDeprecation = true
- const babel = () => () => ({
- module: {
- rules: [
- { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader' },
- ],
- },
- })
- const assets = () => () => ({
- module: {
- rules: [
- {
- test: /\.(png|jpe?g|svg|woff2?|ttf|eot)$/,
- loader: 'url-loader',
- options: {
- limit: 8192,
- name: './assets/[hash].[ext]',
- },
- },
- ],
- },
- })
- const resolveModules = modules => () => ({
- resolve: {
- modules: [].concat(modules, ['node_modules']),
- },
- })
- const node = () => () => ({
- node: {
- console: true,
- fs: 'empty',
- net: 'empty',
- tls: 'empty',
- },
- })
- const config = createConfig([
- setOutput({
- filename: '[name].js',
- path: outputPath,
- publicPath,
- }),
- defineConstants({
- 'process.env.NODE_ENV': process.env.NODE_ENV,
- 'process.env.PUBLIC_PATH': publicPath.replace(/\/$/, ''),
- }),
- () => ({ stats: 'errors-only' }),
- addPlugins([
- new HtmlWebpackPlugin({
- filename: 'index.html',
- template: path.join(process.cwd(), 'public/index.html'),
- }),
- new ProgressPlugin(),
- ]),
- happypack([
- babel(),
- ]),
- assets(),
- resolveModules(sourceDir),
- node(),
- env('development', [
- entryPoint({
- app: [sourcePath, 'webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000'],
- }),
- sourceMaps(),
- addPlugins([
- new webpack.NamedModulesPlugin(),
- new webpack.HotModuleReplacementPlugin(),
- new webpack.NoEmitOnErrorsPlugin(),
- ]),
- ]),
- env('production', [
- entryPoint({
- app: sourcePath,
- }),
- splitVendor(),
- () => ({ devtool: 'nosources-source-map' }),
- addPlugins([
- new webpack.optimize.UglifyJsPlugin({
- compress: { warnings: false },
- mangle: { keep_fnames: true },
- sourceMap: true,
- }),
- ]),
- ]),
- ])
- module.exports = config
|