From cc3e2d9b7a433c92cb5d4ec8e1fada9f34d79f00 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 19 Jan 2017 21:54:40 +0100 Subject: Client: add dll support --- client/.gitignore | 1 + client/config/webpack.common.js | 2 +- client/config/webpack.dev.js | 50 +++++++++++++++++++++++++++++++++++++++++ client/package.json | 4 +++- 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/client/.gitignore b/client/.gitignore index fa5433194..255af83ff 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -2,3 +2,4 @@ /node_modules /compiled /stats.json +/dll diff --git a/client/config/webpack.common.js b/client/config/webpack.common.js index 09d6f72b5..223f55c2e 100644 --- a/client/config/webpack.common.js +++ b/client/config/webpack.common.js @@ -323,7 +323,7 @@ module.exports = function (options) { * See: https://webpack.github.io/docs/configuration.html#node */ node: { - global: 'true', + global: true, crypto: 'empty', process: true, module: false, diff --git a/client/config/webpack.dev.js b/client/config/webpack.dev.js index 054757748..affb20f19 100644 --- a/client/config/webpack.dev.js +++ b/client/config/webpack.dev.js @@ -1,10 +1,12 @@ const helpers = require('./helpers') const webpackMerge = require('webpack-merge') // used to merge webpack configs +const webpackMergeDll = webpackMerge.strategy({plugins: 'replace'}) const commonConfig = require('./webpack.common.js') // the settings that are common to prod and dev /** * Webpack Plugins */ +const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin') const DefinePlugin = require('webpack/lib/DefinePlugin') const NamedModulesPlugin = require('webpack/lib/NamedModulesPlugin') const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin') @@ -23,6 +25,8 @@ const METADATA = webpackMerge(commonConfig({env: ENV}).metadata, { HMR: HMR }) +const DllBundlesPlugin = require('webpack-dll-bundles-plugin').DllBundlesPlugin + /** * Webpack configuration * @@ -106,6 +110,52 @@ module.exports = function (env) { } }), + new DllBundlesPlugin({ + bundles: { + polyfills: [ + 'core-js', + { + name: 'zone.js', + path: 'zone.js/dist/zone.js' + }, + { + name: 'zone.js', + path: 'zone.js/dist/long-stack-trace-zone.js' + }, + 'ts-helpers' + ], + vendor: [ + '@angular/platform-browser', + '@angular/platform-browser-dynamic', + '@angular/core', + '@angular/common', + '@angular/forms', + '@angular/http', + '@angular/router', + '@angularclass/hmr', + 'rxjs' + ] + }, + dllDir: helpers.root('dll'), + webpackConfig: webpackMergeDll(commonConfig({env: ENV}), { + devtool: 'cheap-module-source-map', + plugins: [] + }) + }), + + /** + * Plugin: AddAssetHtmlPlugin + * Description: Adds the given JS or CSS file to the files + * Webpack knows about, and put it into the list of assets + * html-webpack-plugin injects into the generated html. + * + * See: https://github.com/SimenB/add-asset-html-webpack-plugin + */ + new AddAssetHtmlPlugin([ + { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('polyfills')}`) }, + { filepath: helpers.root(`dll/${DllBundlesPlugin.resolveFile('vendor')}`) } + ]), + /** * Plugin: NamedModulesPlugin (experimental) * Description: Uses file names as module name. diff --git a/client/package.json b/client/package.json index 3137af680..ea458f1d4 100644 --- a/client/package.json +++ b/client/package.json @@ -85,7 +85,9 @@ "zone.js": "~0.7.2" }, "devDependencies": { + "add-asset-html-webpack-plugin": "^1.0.2", "codelyzer": "2.0.0-beta.4", - "standard": "^8.0.0" + "standard": "^8.0.0", + "webpack-dll-bundles-plugin": "^1.0.0-beta.5" } } -- cgit v1.2.3