2018-08-23 15:32:50 +00:00
|
|
|
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|
|
|
import CspHtmlWebpackPlugin from 'csp-html-webpack-plugin';
|
|
|
|
import ScriptExtHtmlWebpackPlugin from 'script-ext-html-webpack-plugin';
|
2018-08-24 09:00:50 +00:00
|
|
|
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
|
2018-08-25 03:53:11 +00:00
|
|
|
import FontelloPlugin from 'fontello-webpack-plugin';
|
2018-08-23 15:32:50 +00:00
|
|
|
|
2018-08-24 14:49:50 +00:00
|
|
|
import AutoprefixerPostCSSPlugin from 'autoprefixer';
|
|
|
|
import SystemUIFontFamilyPostCSSPlugin from 'postcss-font-family-system-ui';
|
|
|
|
import PostCSSEnvPreset from 'postcss-preset-env';
|
|
|
|
|
2018-08-23 15:32:50 +00:00
|
|
|
import path from 'path';
|
|
|
|
|
2018-08-25 03:53:11 +00:00
|
|
|
import fontelloConfig from './src/fontello-config.json';
|
|
|
|
|
2018-08-23 15:32:50 +00:00
|
|
|
const sourceDirectory = path.resolve(__dirname, 'src');
|
|
|
|
|
|
|
|
export default (env, { mode }) => {
|
|
|
|
const development = mode === 'development';
|
|
|
|
const production = !development;
|
|
|
|
|
|
|
|
return ({
|
|
|
|
optimization: {
|
|
|
|
runtimeChunk: {
|
|
|
|
name: 'wp',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
plugins: [
|
2018-08-25 03:53:11 +00:00
|
|
|
new FontelloPlugin({
|
|
|
|
config: fontelloConfig,
|
|
|
|
}),
|
2018-08-24 09:00:50 +00:00
|
|
|
new MiniCssExtractPlugin(),
|
2018-08-23 15:32:50 +00:00
|
|
|
new HtmlWebpackPlugin({
|
|
|
|
template: './src/index.html',
|
|
|
|
inject: 'head',
|
|
|
|
viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no',
|
|
|
|
minify: production,
|
|
|
|
xhtml: true,
|
|
|
|
}),
|
|
|
|
production && new CspHtmlWebpackPlugin({
|
|
|
|
'base-uri': "'self'",
|
|
|
|
'object-src': "'none'",
|
|
|
|
'script-src': ["'self'", 'nonce-uGo4I9ydb2hP393boc/24Vu7diUk/Mf84w9khcZkynk='],
|
|
|
|
'style-src': ["'self'"],
|
|
|
|
}),
|
|
|
|
production && new ScriptExtHtmlWebpackPlugin({
|
|
|
|
defaultAttribute: 'defer',
|
|
|
|
custom: [
|
|
|
|
{
|
|
|
|
test: /./,
|
|
|
|
attribute: 'nonce',
|
|
|
|
value: 'uGo4I9ydb2hP393boc/24Vu7diUk/Mf84w9khcZkynk=',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
}),
|
|
|
|
].filter(v => v),
|
|
|
|
|
|
|
|
module: {
|
|
|
|
rules: [
|
|
|
|
{
|
|
|
|
test: /\.js$/i,
|
|
|
|
include: sourceDirectory,
|
2018-08-25 03:51:29 +00:00
|
|
|
loader: 'babel-loader',
|
2018-08-23 15:32:50 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
test: /\.css$/i,
|
|
|
|
use: [
|
2018-08-24 09:00:50 +00:00
|
|
|
MiniCssExtractPlugin.loader,
|
2018-08-23 15:32:50 +00:00
|
|
|
{
|
|
|
|
loader: 'css-loader',
|
|
|
|
options: {
|
|
|
|
modules: true,
|
|
|
|
camelCase: true,
|
2018-08-24 14:49:50 +00:00
|
|
|
importLoaders: 1,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
loader: 'postcss-loader',
|
|
|
|
options: {
|
|
|
|
plugins: [
|
|
|
|
PostCSSEnvPreset(),
|
|
|
|
SystemUIFontFamilyPostCSSPlugin(),
|
|
|
|
AutoprefixerPostCSSPlugin(),
|
|
|
|
],
|
2018-08-23 15:32:50 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
test: /\.styl$/i,
|
|
|
|
use: [
|
2018-08-24 09:00:50 +00:00
|
|
|
MiniCssExtractPlugin.loader,
|
2018-08-23 15:32:50 +00:00
|
|
|
{
|
|
|
|
loader: 'css-loader',
|
|
|
|
options: {
|
|
|
|
modules: true,
|
|
|
|
camelCase: true,
|
2018-08-24 14:49:50 +00:00
|
|
|
importLoaders: 3,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
loader: 'postcss-loader',
|
|
|
|
options: {
|
|
|
|
plugins: [
|
|
|
|
PostCSSEnvPreset(),
|
|
|
|
SystemUIFontFamilyPostCSSPlugin(),
|
|
|
|
AutoprefixerPostCSSPlugin(),
|
|
|
|
],
|
2018-08-23 15:32:50 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
'resolve-url-loader',
|
|
|
|
{
|
|
|
|
loader: 'stylus-loader',
|
|
|
|
options: {
|
|
|
|
sourceMap: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
});
|
|
|
|
};
|