Skip to content

Instantly share code, notes, and snippets.

@pmenichelli
Created October 15, 2017 15:31
Show Gist options
  • Save pmenichelli/1578593b333fb9d866ddb13bbdd0fccc to your computer and use it in GitHub Desktop.
Save pmenichelli/1578593b333fb9d866ddb13bbdd0fccc to your computer and use it in GitHub Desktop.
webpack common configuration mean.io
import 'bootstrap';
require('./styles/clgo-styles.scss');
console.warn('pagina render');
@import "~bootstrap/dist/css/bootstrap.css";
$body-bg-color: red;
body {
background-color: $body-bg-color;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ config.title }}</title>
<meta name="description" content="<%= htmlWebpackPlugin.options.title %>">
<% if (webpackConfig.htmlElements.headTags) { %>
<!-- Configured Head Tags -->
<%= webpackConfig.htmlElements.headTags %>
<!-- Custom fonts for this template -->
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Kaushan+Script' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700' rel='stylesheet' type='text/css'>
<!-- Custom styles for this template -->
<link href="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/css/agency.css" rel="stylesheet">
<!-- base url -->
<base href="<%= htmlWebpackPlugin.options.metadata.baseUrl %>">
<%= htmlWebpackPlugin.files.webpackManifest %>
<% if (htmlWebpackPlugin.options.metadata.isDevServer && htmlWebpackPlugin.options.metadata.HMR !== true) { %>
<!-- Webpack Dev Server reload -->
<script src="/webpack-dev-server.js"></script>
<% } %>
</head>
<body id="page-top">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand js-scroll-trigger" href="#page-top">{{config.title}}</a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse"
data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false"
aria-label="Toggle navigation">
Menu
<i class="fa fa-bars"></i>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
{{#each config.benefits}}
<li class="nav-item"><a class="nav-link js-scroll-trigger" href="{{this}}">{{this}}</a>
</li>
{{/each}}
</ul>
</div>
</div>
</nav>
<!-- Header -->
<header class="masthead">
<div class="container-fluid row">
<div class="intro-text col-md-6">
<div class="intro-lead-in">{{config.subtitle}}</div>
<div class="intro-heading">{{config.subtitle}}</div>
<!--<a class="btn btn-xl js-scroll-trigger" href="#services">Tell Me More</a>-->
</div>
<div class="intro-text col-md-6">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="section-heading">{{config.title}}</h2>
<!--<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>-->
</div>
</div>
<div class="row">
<div class="col-lg-12">
<form id="contactForm" name="sentMessage" novalidate>
<div class="row justify-content-center">
<div class="col-md-8">
<div class="form-group">
<input class="form-control" id="name" {{{config.title}}}
placeholder="{{config.title}}" required
data-validation-required-message="{{config.title}}">
<p class="help-block text-danger"></p>
</div>
<div class="form-group">
<input class="form-control" id="email" {{{config.title}}}
placeholder="{{config.title}}" required
data-validation-required-message="{{config.title}}">
<p class="help-block text-danger"></p>
</div>
</div>
<div class="clearfix"></div>
<div class="col-lg-12 text-center">
<div id="success"></div>
<button id="sendMessageButton" class="btn btn-xl"
type="submit">{{config.title}}</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</header>
<!-- Services -->
<section id="services">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
<h2 class="section-heading">{{config.title}}</h2>
<!--<h3 class="section-subheading text-muted">{{config.title}}</h3>-->
</div>
</div>
<div class="row text-center">
<div class="col-md-4">
<span class="fa-stack fa-4x">
<i class="fa fa-circle fa-stack-2x text-primary"></i>
<i class="fa {{config.title}} fa-stack-1x fa-inverse"></i>
</span>
<h4 class="service-heading">{{config.title}}</h4>
<!--<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>-->
</div>
<div class="col-md-4">
<span class="fa-stack fa-4x">
<i class="fa fa-circle fa-stack-2x text-primary"></i>
<i class="fa {{config.title}} fa-stack-1x fa-inverse"></i>
</span>
<h4 class="service-heading">{{config.title}}</h4>
<!--<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>-->
</div>
<div class="col-md-4">
<span class="fa-stack fa-4x">
<i class="fa fa-circle fa-stack-2x text-primary"></i>
<i class="fa {{config.title}} fa-stack-1x fa-inverse"></i>
</span>
<h4 class="service-heading">{{config.title}}</h4>
<!--<p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>-->
</div>
</div>
</div>
</section>
<!-- Portfolio Modals -->
<!-- Modal 1 -->
<div class="portfolio-modal modal fade" id="portfolioModal1" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl"></div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="modal-body">
<!-- Project Details Go Here -->
<h2>Project Name</h2>
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
<img class="img-fluid d-block mx-auto"
src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/img/portfolio/01-full.jpg"
alt="">
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!</p>
<ul class="list-inline">
<li>Date: January 2017</li>
<li>Client: Threads</li>
<li>Category: Illustration</li>
</ul>
<button class="btn btn-primary" data-dismiss="modal" type="button">
<i class="fa fa-times"></i>
Close Project
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Modal 2 -->
<div class="portfolio-modal modal fade" id="portfolioModal2" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl"></div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="modal-body">
<!-- Project Details Go Here -->
<h2>Project Name</h2>
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
<img class="img-fluid d-block mx-auto"
src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/img/portfolio/02-full.jpg"
alt="">
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!</p>
<ul class="list-inline">
<li>Date: January 2017</li>
<li>Client: Explore</li>
<li>Category: Graphic Design</li>
</ul>
<button class="btn btn-primary" data-dismiss="modal" type="button">
<i class="fa fa-times"></i>
Close Project
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Modal 3 -->
<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl"></div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="modal-body">
<!-- Project Details Go Here -->
<h2>Project Name</h2>
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
<img class="img-fluid d-block mx-auto"
src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/img/portfolio/03-full.jpg"
alt="">
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!</p>
<ul class="list-inline">
<li>Date: January 2017</li>
<li>Client: Finish</li>
<li>Category: Identity</li>
</ul>
<button class="btn btn-primary" data-dismiss="modal" type="button">
<i class="fa fa-times"></i>
Close Project
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Modal 4 -->
<div class="portfolio-modal modal fade" id="portfolioModal4" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl"></div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="modal-body">
<!-- Project Details Go Here -->
<h2>Project Name</h2>
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
<img class="img-fluid d-block mx-auto"
src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/img/portfolio/04-full.jpg"
alt="">
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!</p>
<ul class="list-inline">
<li>Date: January 2017</li>
<li>Client: Lines</li>
<li>Category: Branding</li>
</ul>
<button class="btn btn-primary" data-dismiss="modal" type="button">
<i class="fa fa-times"></i>
Close Project
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Modal 5 -->
<div class="portfolio-modal modal fade" id="portfolioModal5" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl"></div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="modal-body">
<!-- Project Details Go Here -->
<h2>Project Name</h2>
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
<img class="img-fluid d-block mx-auto"
src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/img/portfolio/05-full.jpg"
alt="">
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!</p>
<ul class="list-inline">
<li>Date: January 2017</li>
<li>Client: Southwest</li>
<li>Category: Website Design</li>
</ul>
<button class="btn btn-primary" data-dismiss="modal" type="button">
<i class="fa fa-times"></i>
Close Project
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Modal 6 -->
<div class="portfolio-modal modal fade" id="portfolioModal6" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="close-modal" data-dismiss="modal">
<div class="lr">
<div class="rl"></div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-8 mx-auto">
<div class="modal-body">
<!-- Project Details Go Here -->
<h2>Project Name</h2>
<p class="item-intro text-muted">Lorem ipsum dolor sit amet consectetur.</p>
<img class="img-fluid d-block mx-auto"
src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/img/portfolio/06-full.jpg"
alt="">
<p>Use this area to describe your project. Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt
repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae,
nostrum, reiciendis facere nemo!</p>
<ul class="list-inline">
<li>Date: January 2017</li>
<li>Client: Window</li>
<li>Category: Photography</li>
</ul>
<button class="btn btn-primary" data-dismiss="modal" type="button">
<i class="fa fa-times"></i>
Close Project
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Google Analytics: change UA-71073175-1 to be your site's ID -->
<script>
(function (A, n, g, u, l, a, r) {
A.GoogleAnalyticsObject = r;
A[l] = A[l] || function () {
(A[l].q = A[l].q || []).push(arguments)
}, A[l].l = 1 * new Date();
a = n.createElement(g),
r = n.getElementsByTagName(g)[0];
a.async = 1;
a.src = u;
r.parentNode.insertBefore(a, r)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-71073175-1', 'auto');
ga('send', 'pageview');
console.warn('website: ', '{{ website }}');
console.warn('config.title: ', '{{ config.title }}');
</script>
<!-- Plugin JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
<!-- Contact form JavaScript -->
<script src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/js/jqBootstrapValidation.js"></script>
<script src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/js/contact_me.js"></script>
<!-- Custom scripts for this template -->
<script src="https://rawgit.com/BlackrockDigital/startbootstrap-agency/master/js/agency.min.js"></script>
</body>
</html>
/**
* @author: @AngularClass
*/
const webpack = require('webpack');
const helpers = require('./helpers');
/**
* Webpack Plugins
*
* problem with copy-webpack-plugin
*/
const AssetsPlugin = require('assets-webpack-plugin');
const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin');
const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin');
const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin;
const HtmlElementsPlugin = require('./html-elements-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const InlineManifestWebpackPlugin = require('inline-manifest-webpack-plugin');
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin');
const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin');
const ngcWebpack = require('ngc-webpack');
const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
//const PreloadWebpackPlugin = require('preload-webpack-plugin');
/**
* Webpack Constants
*/
const HMR = helpers.hasProcessFlag('hot');
const AOT = process.env.BUILD_AOT || helpers.hasNpmFlag('aot');
const METADATA = {
title: 'Angular2 Webpack Starter by @gdi2290 from @AngularClass 2',
baseUrl: '/',
isDevServer: helpers.isWebpackDevServer(),
HMR: HMR
};
/**
* Webpack configuration
*
* See: http://webpack.github.io/docs/configuration.html#cli
*/
module.exports = function (options) {
isProd = options.env === 'production';
return {
/**
* Cache generated modules and chunks to improve performance for multiple incremental builds.
* This is enabled by default in watch mode.
* You can pass false to disable it.
*
* See: http://webpack.github.io/docs/configuration.html#cache
*/
//cache: false,
/**
* The entry point for the bundle
* Our Angular.js app
*
* See: http://webpack.github.io/docs/configuration.html#entry
*/
entry: {
'polyfills': './src/polyfills.browser.ts',
'main': './src/clgo.browser.ts'
},
/**
* Options affecting the resolving of modules.
*
* See: http://webpack.github.io/docs/configuration.html#resolve
*/
resolve: {
/**
* An array of extensions that should be used to resolve modules.
*
* See: http://webpack.github.io/docs/configuration.html#resolve-extensions
*/
extensions: ['.ts', '.js', '.json'],
/**
* An array of directory names to be resolved to the current directory
*/
modules: [helpers.root('src'), helpers.root('node_modules')],
},
/**
* Options affecting the normal modules.
*
* See: http://webpack.github.io/docs/configuration.html#module
*/
module: {
rules: [
/**
* Typescript loader support for .ts
*
* Component Template/Style integration using `angular2-template-loader`
* Angular 2 lazy loading (async routes) via `ng-router-loader`
*
* `ng-router-loader` expects vanilla JavaScript code, not TypeScript code. This is why the
* order of the loader matters.
*
* See: https://github.com/s-panferov/awesome-typescript-loader
* See: https://github.com/TheLarkInn/angular2-template-loader
* See: https://github.com/shlomiassaf/ng-router-loader
*/
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react']
}
},
{
test: /\.ts$/,
use: [
{
loader: '@angularclass/hmr-loader',
options: {
pretty: !isProd,
prod: isProd
}
},
{
/**
* MAKE SURE TO CHAIN VANILLA JS CODE, I.E. TS COMPILATION OUTPUT.
*/
loader: 'ng-router-loader',
options: {
loader: 'async-import',
genDir: 'compiled',
aot: AOT
}
},
{
loader: 'awesome-typescript-loader',
options: {
configFileName: 'tsconfig.webpack.json',
useCache: !isProd
}
},
{
loader: 'angular2-template-loader'
}
],
exclude: [/\.(spec|e2e)\.ts$/]
},
/**
* Json loader support for *.json files.
*
* See: https://github.com/webpack/json-loader
*/
{
test: /\.json$/,
use: 'json-loader'
},
/**
* To string and css loader support for *.css files (from Angular components)
* Returns file content as string
*
*/
{
test: /\.css$/,
use: ['to-string-loader', 'css-loader'],
exclude: [helpers.root('src', 'styles')]
},
/**
* To string and sass loader support for *.scss files (from Angular components)
* Returns compiled css content as string
*
*/
{
test: /\.scss$/,
use: ['to-string-loader', 'css-loader', 'sass-loader'],
exclude: [helpers.root('src', 'styles')]
},
/**
* Raw loader support for *.html
* Returns file content as string
*
* See: https://github.com/webpack/raw-loader
*/
{
test: /\.html$/,
use: 'raw-loader',
exclude: [helpers.root('src/index.html')]
},
/**
* File loader for supporting images, for example, in CSS files.
*/
{
test: /\.(jpg|png|gif)$/,
use: 'file-loader'
},
/* File loader for supporting fonts, for example, in CSS files.
*/
{
test: /\.(eot|woff2?|svg|ttf)([\?]?.*)$/,
use: 'file-loader'
}
],
},
/**
* Add additional plugins to the compiler.
*
* See: http://webpack.github.io/docs/configuration.html#plugins
*/
plugins: [
// Use for DLLs
// new AssetsPlugin({
// path: helpers.root('dist'),
// filename: 'webpack-assets.json',
// prettyPrint: true
// }),
/**
* Plugin: ForkCheckerPlugin
* Description: Do type checking in a separate process, so webpack don't need to wait.
*
* See: https://github.com/s-panferov/awesome-typescript-loader#forkchecker-boolean-defaultfalse
*/
new CheckerPlugin(),
/**
* Plugin: CommonsChunkPlugin
* Description: Shares common code between the pages.
* It identifies common modules and put them into a commons chunk.
*
* See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin
* See: https://github.com/webpack/docs/wiki/optimization#multi-page-app
*/
new CommonsChunkPlugin({
name: 'polyfills',
chunks: ['polyfills']
}),
/**
* This enables tree shaking of the vendor modules
*/
// new CommonsChunkPlugin({
// name: 'vendor',
// chunks: ['main'],
// minChunks: module => /node_modules/.test(module.resource)
// }),
/**
* Specify the correct order the scripts will be injected in
*/
// new CommonsChunkPlugin({
// name: ['polyfills', 'vendor'].reverse()
// }),
// new CommonsChunkPlugin({
// name: ['manifest'],
// minChunks: Infinity,
// }),
/**
* Plugin: ContextReplacementPlugin
* Description: Provides context to Angular's use of System.import
*
* See: https://webpack.github.io/docs/list-of-plugins.html#contextreplacementplugin
* See: https://github.com/angular/angular/issues/11580
*/
new ContextReplacementPlugin(
/**
* The (\\|\/) piece accounts for path separators in *nix and Windows
*/
/angular(\\|\/)core(\\|\/)@angular/,
helpers.root('src'), // location of your src
{
/**
* Your Angular Async Route paths relative to this root directory
*/
}
),
/**
* Plugin: CopyWebpackPlugin
* Description: Copy files and directories in webpack.
*
* Copies project static assets.
*
* See: https://www.npmjs.com/package/copy-webpack-plugin
*/
new CopyWebpackPlugin([
{ from: 'src/assets', to: 'assets' },
{ from: 'src/meta'}
],
isProd ? { ignore: [ 'mock-data/**/*' ] } : undefined
),
/*
* Plugin: PreloadWebpackPlugin
* Description: Preload is a web standard aimed at improving
* performance and granular loading of resources.
*
* See: https://github.com/GoogleChrome/preload-webpack-plugin
*/
//new PreloadWebpackPlugin({
// rel: 'preload',
// as: 'script',
// include: ['polyfills', 'vendor', 'main'].reverse(),
// fileBlacklist: ['.css', '.map']
//}),
//new PreloadWebpackPlugin({
// rel: 'prefetch',
// as: 'script',
// include: 'asyncChunks'
//}),
/**
* Plugin: ScriptExtHtmlWebpackPlugin
* Description: Enhances html-webpack-plugin functionality
* with different deployment options for your scripts including:
*
* See: https://github.com/numical/script-ext-html-webpack-plugin
*/
new ScriptExtHtmlWebpackPlugin({
sync: /polyfill|vendor/,
defaultAttribute: 'async',
preload: [/polyfill|vendor|main/],
prefetch: [/chunk/]
}),
/*
* Plugin: HtmlWebpackPlugin
* Description: Simplifies creation of HTML files to serve your webpack bundles.
* This is especially useful for webpack bundles that include a hash in the filename
* which changes every compilation.
*
* See: https://github.com/ampedandwired/html-webpack-plugin
*/
new HtmlWebpackPlugin({
template: 'src/index.hbs',
title: METADATA.title,
// filename: 'index.hbs',
chunksSortMode: 'dependency',
metadata: METADATA,
inject: 'body'
}),
/**
* Plugin: HtmlElementsPlugin
* Description: Generate html tags based on javascript maps.
*
* If a publicPath is set in the webpack output configuration, it will be automatically added to
* href attributes, you can disable that by adding a "=href": false property.
* You can also enable it to other attribute by settings "=attName": true.
*
* The configuration supplied is map between a location (key) and an element definition object (value)
* The location (key) is then exported to the template under then htmlElements property in webpack configuration.
*
* Example:
* Adding this plugin configuration
* new HtmlElementsPlugin({
* headTags: { ... }
* })
*
* Means we can use it in the template like this:
* <%= webpackConfig.htmlElements.headTags %>
*
* Dependencies: HtmlWebpackPlugin
*/
new HtmlElementsPlugin({
headTags: require('./head-config.common')
}),
/**
* Plugin LoaderOptionsPlugin (experimental)
*
* See: https://gist.github.com/sokra/27b24881210b56bbaff7
*/
new LoaderOptionsPlugin({}),
new ngcWebpack.NgcWebpackPlugin({
/**
* If false the plugin is a ghost, it will not perform any action.
* This property can be used to trigger AOT on/off depending on your build target (prod, staging etc...)
*
* The state can not change after initializing the plugin.
* @default true
*/
disabled: !AOT,
tsConfig: helpers.root('tsconfig.webpack.json'),
/**
* A path to a file (resource) that will replace all resource referenced in @Components.
* For each `@Component` the AOT compiler compiles it creates new representation for the templates (html, styles)
* of that `@Components`. It means that there is no need for the source templates, they take a lot of
* space and they will be replaced by the content of this resource.
*
* To leave the template as is set to a falsy value (the default).
*
* TIP: Use an empty file as an overriding resource. It is recommended to use a ".js" file which
* usually has small amount of loaders hence less performance impact.
*
* > This feature is doing NormalModuleReplacementPlugin for AOT compiled resources.
*
* ### resourceOverride and assets
* If you reference assets in your styles/html that are not inlined and you expect a loader (e.g. url-loader)
* to copy them, don't use the `resourceOverride` feature as it does not support this feature at the moment.
* With `resourceOverride` the end result is that webpack will replace the asset with an href to the public
* assets folder but it will not copy the files. This happens because the replacement is done in the AOT compilation
* phase but in the bundling it won't happen (it's being replaced with and empty file...)
*
* @default undefined
*/
resourceOverride: helpers.root('config/resource-override.js')
}),
/**
* Plugin: InlineManifestWebpackPlugin
* Inline Webpack's manifest.js in index.html
*
* https://github.com/szrenwei/inline-manifest-webpack-plugin
*/
new InlineManifestWebpackPlugin(),
/**
* https://stackoverflow.com/questions/45660672/webpack-fails-to-load-bootstrap-v4-0-0-beta
*/
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
Popper: ['popper.js', 'default']
}),
/**
* https://medium.com/@wesharehoodies/simple-beginner-guide-for-webpack-2-0-from-scratch-part-iii-d374c021f9fc
*/
new ExtractTextWebpackPlugin('clgo-style.css')
// new HandlebarsPlugin({
// // path to hbs entry file(s)
// entry: path.join(process.cwd(), "app", "src", "*.hbs"),
// // output path and filename(s)
// // if ommited, the input filepath stripped of its extension will be used
// output: path.join(process.cwd(), "build", "[name].html"),
// // data passed to main hbs template: `main-template(data)`
// data: require("./app/data/project.json"),
// // or add it as filepath to rebuild data on change using webpack-dev-server
// data: path.join(__dirname, "app/data/project.json"),
//
// // globbed path to partials, where folder/filename is unique
// partials: [
// path.join(process.cwd(), "app", "src", "components", "*", "*.hbs")
// ],
//
// // register custom helpers. May be either a function or a glob-pattern
// helpers: {
// nameOfHbsHelper: Function.prototype,
// projectHelpers: path.join(process.cwd(), "app", "helpers", "*.helper.js")
// },
//
// // hooks
// onBeforeSetup: function (Handlebars) {},
// onBeforeAddPartials: function (Handlebars, partialsMap) {},
// onBeforeCompile: function (Handlebars, templateContent) {},
// onBeforeRender: function (Handlebars, data) {},
// onBeforeSave: function (Handlebars, resultHtml, filename) {},
// onDone: function (Handlebars, filename) {}
// })
],
/**
* Include polyfills or mocks for various node stuff
* Description: Node configuration
*
* See: https://webpack.github.io/docs/configuration.html#node
*/
node: {
global: true,
crypto: 'empty',
process: true,
module: false,
clearImmediate: false,
setImmediate: false
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment