openstackid/webpack.config.js

136 lines
4.4 KiB
JavaScript

/**
* Copyright 2018 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const _ = require('lodash');
const CopyWebpackPlugin = require('copy-webpack-plugin');
var PRODUCTION = process.env.NODE_ENV === 'production';
console.log(`FLAVOR ${process.env.FLAVOR}`);
var plugins = [
new ExtractTextPlugin({ filename: 'css/[name].css' }),
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
filename: '__common__.js',
//chunks: ["main", "utils"],
deepChildren: true
}),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
}),
new CopyWebpackPlugin([
{from: './node_modules/bootstrap-tagsinput/dist', to: 'bootstrap-tagsinput'},
{from: './node_modules/typeahead.js/dist', to: 'typeahead'},
{from: './node_modules/jquery.cookie/jquery.cookie.js', to: 'jquery-cookie/jquery.cookie.js'},
{from: './node_modules/crypto-js/crypto-js.js', to: 'crypto-js/crypto-js.js'},
{from: './node_modules/pwstrength-bootstrap/dist', to: 'pwstrength-bootstrap'},
{from: './node_modules/sweetalert2/dist', to: 'sweetalert2'},
{from: './node_modules/urijs/src', to: 'urijs'},
],
{copyUnmodified: false}
),
];
var productionPlugins = [
//new UglifyJSPlugin(),
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
})
];
var devPlugins = [];
function styleLoader(loaders) {
if (PRODUCTION)
return ExtractTextPlugin.extract({ fallback: 'style-loader', use: loaders });
return [ 'style-loader', ...loaders ];
}
/**
*
* @returns {object}
*/
function postCSSLoader() {
return {
loader: "postcss-loader",
options: {
plugins: function () {
return [require("autoprefixer")];
}
}
}
}
module.exports = {
entry: {
'index': './resources/assets/js/index.js',
},
devtool: "source-map",
devServer: {
contentBase: './dist',
historyApiFallback: true
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'public/assets'),
publicPath: '/assets/'
},
module: {
rules: [
{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },
{
test: /\.css$/,
exclude: /\.module\.css$/,
use: styleLoader(['css-loader', postCSSLoader()])
},
{
test: /\.less/,
exclude: /\.module\.less/,
use: styleLoader(['css-loader', postCSSLoader(), 'less-loader'])
},
{
test: /\.scss/,
exclude: /\.module\.scss/,
use: styleLoader(['css-loader', postCSSLoader(), 'sass-loader'])
},
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: "url-loader?limit=10000&minetype=application/font-woff&name=fonts/[name].[ext]"
},
{
test: /\.(ttf|eot)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: "file-loader?name=fonts/[name].[ext]"
},
{
test: /\.jpg|\.png|\.gif$/,
use: "file-loader?name=images/[name].[ext]"
},
{
test: /\.svg/,
use: "file-loader?name=svg/[name].[ext]!svgo-loader"
},
{
test: /\.json/,
use: "json-loader"
}
]
},
plugins: PRODUCTION
? plugins.concat(productionPlugins)
: plugins.concat(devPlugins),
};