*/
const AssetsPlugin = require('assets-webpack-plugin')
-const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
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 HtmlWebpackPlugin = require('html-webpack-plugin')
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin')
const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin')
+const InlineManifestWebpackPlugin = require('inline-manifest-webpack-plugin')
const ngcWebpack = require('ngc-webpack')
const WebpackNotifierPlugin = require('webpack-notifier')
-/*
- * Webpack Constants
- */
+const HMR = helpers.hasProcessFlag('hot')
+const AOT = process.env.BUILD_AOT || helpers.hasNpmFlag('aot')
const METADATA = {
title: 'PeerTube',
baseUrl: '/',
- isDevServer: helpers.isWebpackDevServer()
+ isDevServer: helpers.isWebpackDevServer(),
+ HMR: HMR,
+ AOT: AOT
}
/*
{
test: /\.ts$/,
use: [
- {
- loader: '@angularclass/hmr-loader',
- options: {
- pretty: !isProd,
- prod: isProd
- }
- },
{
loader: 'ng-router-loader',
options: {
test: /\.(sass|scss)$/,
use: [
'css-to-string-loader',
- 'css-loader?sourceMap',
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ importLoaders: 1
+ }
+ },
'resolve-url-loader',
{
loader: 'sass-loader',
]
},
{ test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'url-loader?limit=10000&minetype=application/font-woff' },
- { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'file-loader' },
+ { test: /\.(otf|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: 'url-loader?limit=10000' },
/* Raw loader support for *.html
* Returns file content as string
*/
{
test: /\.(jpg|png|gif)$/,
- use: 'file-loader'
+ use: 'url-loader'
}
]
new CommonsChunkPlugin({
name: 'vendor',
chunks: ['main'],
- minChunks: module => /node_modules\//.test(module.resource)
+ minChunks: module => {
+ return /node_modules\//.test(module.resource)
+ }
}),
// Specify the correct order the scripts will be injected in
/**
* The (\\|\/) piece accounts for path separators in *nix and Windows
*/
- /angular(\\|\/)core(\\|\/)@angular/,
+ /(.+)?angular(\\|\/)core(.+)?/,
helpers.root('src'), // location of your src
{
/**
),
/*
- * Plugin: CopyWebpackPlugin
- * Description: Copy files and directories in webpack.
- *
- * Copies project static assets.
+ * 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://www.npmjs.com/package/copy-webpack-plugin
+ * See: https://github.com/ampedandwired/html-webpack-plugin
*/
- // Used by embed.html
- new CopyWebpackPlugin([
- {
- from: 'src/assets',
- to: 'assets'
+ new HtmlWebpackPlugin({
+ template: 'src/index.html',
+ title: METADATA.title,
+ chunksSortMode: function (a, b) {
+ const entryPoints = [ 'inline', 'polyfills', 'sw-register', 'styles', 'vendor', 'main' ]
+ return entryPoints.indexOf(a.names[0]) - entryPoints.indexOf(b.names[0])
},
- {
- from: 'src/standalone',
- to: 'standalone'
- }
- ]),
+ metadata: METADATA,
+ inject: 'body'
+ }),
/*
* Plugin: ScriptExtHtmlWebpackPlugin
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.html',
- title: METADATA.title,
- chunksSortMode: 'dependency',
- metadata: METADATA,
- inject: 'body'
- }),
-
new WebpackNotifierPlugin({ alwaysNotify: true }),
/**
new ngcWebpack.NgcWebpackPlugin({
disabled: !AOT,
- tsConfig: helpers.root('tsconfig.webpack.json'),
- resourceOverride: helpers.root('config/resource-override.js')
+ tsConfig: helpers.root('tsconfig.webpack.json')
}),
- new BundleAnalyzerPlugin({
- // Can be `server`, `static` or `disabled`.
- // In `server` mode analyzer will start HTTP server to show bundle report.
- // In `static` mode single HTML file with bundle report will be generated.
- // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting `generateStatsFile` to `true`.
- analyzerMode: 'static',
- // Path to bundle report file that will be generated in `static` mode.
- // Relative to bundles output directory.
- reportFilename: 'report.html',
- // Automatically open report in default browser
- openAnalyzer: false,
- // If `true`, Webpack Stats JSON file will be generated in bundles output directory
- generateStatsFile: true,
- // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`.
- // Relative to bundles output directory.
- statsFilename: 'stats.json',
- // Options for `stats.toJson()` method.
- // For example you can exclude sources of your modules from stats file with `source: false` option.
- // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21
- statsOptions: null,
- // Log level. Can be 'info', 'warn', 'error' or 'silent'.
- logLevel: 'info'
- })
+ new InlineManifestWebpackPlugin()
],
/*